ค่าคงที่ในภาษา C (Constants in C)

ภาพรวม


ตัวแปรที่มีค่าคงที่ซึ่งไม่เปลี่ยนแปลงและไม่สามารถเปลี่ยนแปลงได้ตลอดการทำงานของโปรแกรมเมื่อเริ่มต้นแล้วจะเรียกว่า Constants

constant ส่วนใหญ่มีสองประเภท: หลักและรอง ค่าคงที่หลักและค่าคงที่รองจะถูกแบ่งออกเป็นหมวดหมู่ย่อยอีกครั้ง ค่าคงที่ในภาษา C สามารถประกาศได้สองวิธี ได้แก่ ใช้ คีย์เวิร์ด const หรือ #define คำสั่งตัวประมวลผลล่วงหน้า


ขอบเขต


  • ในบทความนี้ เราจะมาทำความเข้าใจว่าค่าคงที่คืออะไรและจะประกาศค่าคงที่ได้อย่างไร
  • บทความนี้จะอธิบายเกี่ยวกับค่าคงที่ประเภทต่างๆ
  • บทความนี้ไม่ได้อธิบายรายละเอียดแต่ละประเภทข้อมูลโดยละเอียด


บทนำ

ในชีวิตประจำวันของเรา เราได้พบกับค่าคงที่มากมาย เช่น pi ค่าคงที่โน้มถ่วง ความเร่งเนื่องจากแรงโน้มถ่วง เป็นต้น เรารู้ว่าค่าคงที่คงที่และไม่สามารถเปลี่ยนแปลงได้ แต่โดยค่าเริ่มต้นแล้ว คอมพิวเตอร์จะไม่ทราบว่าค่าคงที่คืออะไร และในขณะที่เขียนโค้ด เราจะบอกให้คอมพิวเตอร์ทราบว่าตัวแปรใดควรเก็บไว้เป็นค่าคงที่ ในบทความนี้ ให้เราดูค่าคงที่ประเภทต่างๆ และวิธีที่เราสามารถประกาศตัวแปรเป็นค่าคงที่ได้

อาจมีข้อมูลบางอย่างที่มีค่าคงที่ตลอดการทำงานของโปรแกรม ตัวแปรดังกล่าวเรียกว่าตัวแปรคงที่ ค่าที่กำหนดให้กับตัวแปรเรียกว่าค่า ตาม ตัวอักษร

ในภาพประกอบด้านบน เราจะเห็นได้ว่าเราได้สร้างค่าคงที่xและกำหนดค่า 5 ให้กับ constant ที่นี่ค่าที่กำหนดให้กับค่าคงที่เรียกว่า literal

บทความนี้จะเรียนรู้เกี่ยวกับส่วน const int x โดยละเอียด ดังนั้นไม่ต้องกังวลหากคุณไม่เข้าใจ

ค่าคงที่ใน C คืออะไร?

ตามชื่อที่แนะนำ constant ค่าคงที่คือตัวแปรที่ค่าไม่สามารถเปลี่ยนแปลงได้ตลอดการทำงานของโปรแกรม เมื่อมีการเริ่มต้นที่จุดเริ่มต้นของโปรแกรม ค่าคงที่เรียกอีกอย่างว่า literals สามารถตั้งค่าตัวเลข อักขระ สตริงของอักขระ อาร์เรย์ โครงสร้าง ยูเนียน ตัวชี้ และ enum เป็นค่าคงที่ได้

วิธีการใช้ค่าคงที่ใน C?

ในภาษาซี ตัวแปรสามารถใช้เป็นค่าคงที่ได้ด้วยวิธีต่อไปนี้:

  • การใช้คีย์เวิร์ด const
  • การใช้ตัวประมวลผลล่วงหน้า (preprocessor) #define

ก่อนที่เราจะเริ่มสร้างค่าคงที่ เรามาทำความเข้าใจเกี่ยวกับค่าคงที่ประเภทต่างๆ ใน ​​C กันก่อน

ประเภทของค่าคงที่ในC

ค่าคงที่สามารถแบ่งออกกว้างๆ ได้เป็นสองประเภท:

  • ค่าคงที่หลัก (Primary Constants)
  • ค่าคงที่รอง (Secondary Constants)

อีกครั้งที่ค่าคงที่หลักและค่าคงที่รองถูกแบ่งออก ซึ่งสามารถเห็นได้ในลำดับชั้นที่แสดงด้านล่าง

ค่าคงที่หลัก

ค่าคงที่ประเภททศนิยม จำนวนเต็ม และอักขระเรียกว่าค่าคงที่หลัก

ตัวอย่างค่าคงที่หลัก:
1, 1.23, “Lungmaker”, ‘h’ เป็นต้น

ดังที่คุณเห็นแล้วว่าทศนิยม จำนวนเต็ม และอักขระเป็นค่าคงที่หลัก และเรารู้ว่าทศนิยม จำนวนเต็ม และอักขระเป็นประเภทข้อมูลหลัก เนื่องจากค่าคงที่เป็นประเภทข้อมูลหลักจึงเรียกว่าค่าคงที่หลัก

ค่าคงที่หลักสามารถแบ่งออกเป็น .ได้อีกครั้ง

  • ค่าคงที่ตัวเลข (Numeric Constants)
  • ค่าคงที่อักขระ (Character Constants)

ค่าคงที่ตัวเลข

ค่าคงที่ตัวเลขประกอบด้วยตัวเลขที่มีเครื่องหมายหรือไม่มีเครื่องหมาย หรือศูนย์หรือทศนิยม สรุปตัวเลขทุกประเภทอยู่ภายใต้ค่าคงที่ตัวเลข

ค่าคงที่ตัวเลขแบ่งออกเป็นสามประเภทอีกครั้ง:

  • จำนวนเต็มทศนิยม (Decimal Integer)
  • เลขฐานแปด (Octal Integer)
  • เลขฐานสิบหก (Hexadecimal Intege)

ค่าคงที่ จำนวนเต็ม
ค่าคงที่จำนวนเต็มคือตัวเลขที่มีทศนิยม (ฐาน 10), เลขฐานสิบหก (ฐาน 16), เลขฐานสอง (ฐาน 2) หรือฐานแปด (ฐาน 8) เราจะเข้าใจสิ่งนี้ดีขึ้นเมื่อเราพิจารณาค่าคงที่จำนวนเต็มแต่ละตัว

แจ้งให้เราทราบเพิ่มเติมเกี่ยวกับค่าคงที่จำนวนเต็มแต่ละตัวโดยละเอียด

จำนวนเต็ม
ทศนิยม จำนวนเต็มทศนิยมคือค่าคงที่ที่มีฐาน 10 ตัวเลขทศนิยมที่ไม่ใช่ศูนย์ (1 ถึง 9) เป็นจำนวนเต็มทศนิยมตามด้วยเลขทศนิยมศูนย์หรือมากกว่า (0 ถึง 9 )

ตัวอย่าง: 255,100,69,999 เป็นต้น

จำนวนเต็ม
เลขฐานแปด จำนวนเต็มเลขฐานแปดคือค่าคงที่ที่มีฐาน 8 เลขศูนย์ (0) ตามด้วยเลขฐานแปดศูนย์หรือมากกว่า (0 ถึง 7)

ตัวอย่าง: 0, 0125, 034673, 03245 เป็นต้น

เลขฐานสิบหก จำนวนเต็ม
เลขฐานสิบหกคือค่าคงที่ที่มีฐาน 16 ลำดับเริ่มต้นด้วย 0x ตามด้วยเลขฐานสิบหกอย่างน้อยหนึ่งหลัก (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, a, A, b, B, c, C, d, D, e, E, f, F)

ตัวอย่าง: 0x3b24, 0XF96, 0x21, 0x3AA, 0X29b, 0X4bD เป็นต้น

ค่าคงที่ จริง
ค่าคงที่ที่มีการรวมกันของค่าบวก ค่าลบ หรือศูนย์ ตามด้วยจุดทศนิยมและส่วนที่เป็นเศษส่วนเรียกว่าค่าคงที่จริง

ตัวอย่าง: -89, 0.123, 45 เป็นต้น

ค่าคงที่อักขระ

อักขระตั้งแต่หนึ่งตัวขึ้นไปอยู่ในเครื่องหมายคำพูดเดียว ( ‘ ‘ ) หรือ ( “” ) ขึ้นอยู่กับประเภทของอักขระ

ค่าคงที่อักขระตัว เดียว
ค่าคงที่อักขระที่มีอักขระตัวเดียวอยู่ภายใน‘ ‘ (เครื่องหมายอัญประกาศเดี่ยว) เรียกว่าค่าคงที่อักขระ
ตัวอย่าง: ‘s’, ‘c’, ‘a’, ‘l’, ‘e’, ​​’r’ เป็นต้น

ค่าคงที่ สตริง
ค่าคงที่อักขระที่มีสัญลักษณ์พิเศษ ตัวเลข อักขระ และซีเควนซ์พิเศษต่างๆ อยู่ภายใน” “ (เครื่องหมายคำพูดคู่) เรียกว่า ค่าคงที่สตริง

ให้เราดูตัวอย่างและพยายามทำความเข้าใจให้ดีขึ้น
ตัวอย่าง: “Lungmaker”, “by”, “InterviewBit”, “123”, “number1” เป็นต้น

ดังที่เราเห็นในตัวอย่างข้างต้น คำหรือสตริงทั้งหมดอยู่ในเครื่องหมายคำพูดคู่ หากเราดูตัวอย่างสองตัวอย่างสุดท้าย เราจะเห็นตัวเลข แต่คอมพิวเตอร์จะถือว่าตัวเลขนั้นเป็นสตริง เนื่องจากอยู่ภายในเครื่องหมายคำพูดคู่

ค่าคงที่อักขระแบ็กสแลช

Backslash characters หรือ Escape Sequence คือประเภทของค่าคงที่อักขระ อักขระแบ็กสแลชที่แน่นอนทำงานเฉพาะ ลองนึกภาพว่าเรากำลังเขียนโค้ด และในโค้ดนั้น เราได้เพิ่มประโยคสองสามประโยค และเราต้องการให้พิมพ์แยกบรรทัด เพื่อจุดประสงค์นี้ เราสามารถเขียน คำสั่ง printf ได้สามครั้ง แต่นั่นไม่ใช่วิธีที่มีประสิทธิภาพในการเขียนโค้ด ตอนนี้เราต้องบอกให้คอมไพเลอร์พิมพ์ประโยคเป็น 3 บรรทัด แล้วเราจะบอกคอมไพเลอร์ได้อย่างไร? เราสามารถใช้อักขระแบ็กสแลช \n เพื่อบอกให้คอมไพเลอร์พิมพ์ประโยคใน 3 บรรทัดที่แตกต่างกัน นี่คือรายการของอักขระแบ็กสแลชและความหมาย:

ConstantsMeaning
\abeep sound
\bbackspace
\fform feed
\nnew line
\rcarriage return
\thorizontal tab
\vvertical tab
\’single quote
\”double quote
\\backslash
\0null

ค่าคงที่รอง (Secondary Constant)


ประเภทข้อมูลเช่น Array, Pointers, โครงสร้าง, Union และ Enum ที่มีค่าคงที่คงที่ซึ่งยังคงเหมือนเดิมระหว่างการดำเนินการทั้งหมดของโปรแกรมเรียกว่าค่าคงที่รอง

เราจะเห็นได้ว่าสิ่งเหล่านี้เป็นประเภทข้อมูลรอง และเราสามารถสรุปได้ว่าชนิดข้อมูลรองถือเป็นประเภทข้อมูลรอง

ประเภทของค่าคงที่รอง


ค่าคงที่รองส่วนใหญ่มีห้าประเภท ให้เราดูสั้น ๆ เกี่ยวกับค่าคงที่รองแต่ละตัวโดยละเอียด

  • Arrray
    ชุดของรายการข้อมูลที่คล้ายกันซึ่งจัดเก็บไว้ในตำแหน่งหน่วยความจำที่อยู่ติดกันเรียกว่า Array อาร์เรย์สามารถจินตนาการได้ว่าเป็นถาดไข่ซึ่งวางไข่ไว้ในถาด ในทำนองเดียวกัน อาร์เรย์ก็เหมือนกับถาดไข่ และข้อมูลที่เก็บอยู่ในอาร์เรย์สามารถจินตนาการได้เมื่อวางไข่ลงในถาด
    ตัวอย่าง: int marks[100], float numbers[50], char name[50], เป็นต้น

เมื่อองค์ประกอบที่เก็บไว้ในอาร์เรย์มีค่าคงที่ อาร์เรย์จะเรียกว่าอาร์เรย์คงที่

  • Pointer
    Pointer พอยน์เตอร์เป็นตัวแปรชนิดพิเศษที่เก็บแอดเดรสของตัวแปรอื่นๆ แทนที่จะเป็นค่า ตัวอย่าง: int* p, int* pointer เป็นต้น
    เมื่อพอยน์เตอร์เก็บแอดเดรสของตัวแปรเดียวกันไว้ตลอดการทำงานของโปรแกรม จะเรียกว่าตัวชี้คงที่

  • Structure
    Structure เป็นประเภทข้อมูลที่ผู้ใช้กำหนด ซึ่งสามารถใช้เพื่อจัดกลุ่มข้อมูลประเภทต่างๆ ให้เป็นประเภทข้อมูลเดียว โครงสร้างเป็นกลุ่มของข้อมูลประเภทต่างๆ ที่จัดกลุ่มไว้ สมมติว่าเราต้องการเก็บรายละเอียดของบุคคล เช่น ชื่อ เพศ หมายเลขโทรศัพท์ และอายุ เราสามารถสร้างตัวแปรแยกสำหรับแต่ละรายการและเก็บค่าได้ ลองนึกภาพถ้าคุณต้องการเก็บรายละเอียดของ พนักงาน 100 คนในบริษัทหนึ่ง คงจะยุ่งยากในการจัดเก็บค่า 4 ราย ละเอียดของพนักงานแต่ละคน ซึ่งก็คือ 400 ตัวแปรที่แตกต่างกัน แต่เราสามารถสร้างโครงสร้างเดียวและใช้โครงสร้างเดียวกัน ได้ 100 ครั้ง


ตัวอย่าง

struct Person{
    char name[50];
    int age;
    float income;
};

เมื่อเนื้อหาของโครงสร้างยังคงเหมือนเดิมตลอดการทำงานของโปรแกรม จะเรียกว่าโครงสร้างคงที่

  • Union
    Union เป็นประเภทข้อมูลในภาษา C ที่ช่วยให้เราจัดเก็บข้อมูลประเภทต่างๆ ในตำแหน่งเดียวกันได้ เราสามารถกำหนด union ที่มีสมาชิกจำนวนมาก แต่ union สามารถมีค่าในเวลาที่กำหนด

ตัวอย่าง:

union data{
    int age;
    char name[50];
    char city[50];
    int phnumber;
}data;

  • Enum
    Enum หรือประเภท Enumerated เป็นประเภทข้อมูลที่กำหนดโดยผู้ใช้ ซึ่งใช้เพื่อกำหนดชื่อให้กับ integral constants เนื่องจากชื่อนั้นง่ายต่อการจัดการในโปรแกรมตัวอย่าง: enum vehicle{car, bus, train, bike}; ในที่นี้ car จะมีค่าเป็น 0 bus จะมีค่าเป็น 1 เป็นต้น เราจะเข้าใจ Enum ได้ดีขึ้นในบทความอื่น ๆ ของเราและมาเน้นที่ค่าคงที่ใน C ในบทความนี้

วิธีการกำหนดค่าคงที่ใน C

จนถึงตอนนี้ เราได้เรียนรู้ว่าค่าคงที่คืออะไร และค่าคงที่ประเภทต่าง ๆ มีอะไรบ้าง ตอนนี้เรามาดูวิธีการสร้างค่าคงที่และจะเกิดอะไรขึ้นหากเราพยายามเปลี่ยนค่าของค่าคงที่ เราสามารถนิยามค่าคงที่เป็นหลักได้สองวิธี พวกเขาคือ:

const Keyword

การใช้ const Keyword เป็นวิธีพื้นฐานและง่ายที่สุดในการประกาศค่าคงที่ คุณเพียงแค่ต้องเพิ่มคีย์เวิร์ด const ก่อนการประกาศตัวแปร ในขณะที่ใช้ คีย์เวิร์ด const เพื่อกำหนดค่าคงที่ พึงระลึกไว้เสมอว่าค่าคงที่นั้นจะต้องเริ่มต้นที่จุดเริ่มต้นของโปรแกรม และไม่สามารถเปลี่ยนแปลงได้ในภายหลัง

const datatype = value;


ตัวอย่างต่อไปนี้จะอธิบายวิธีการประกาศตัวแปรเป็นค่าคงที่:

#include <stdio.h>

int main()
{   
    const float pi = 3.14; //The value of pi is set as constant
    float area, r;
    printf("Enter the radius of the circle : ");
    scanf("%f", &r);
    area = pi * r * r;
    printf("\nThe area of the circle is %f", area);

    return 0;
}


ดังที่เราเห็นในโปรแกรมข้างต้น เรากำลังพยายามหาพื้นที่ของวงกลม อย่างที่เราทราบค่าของ pi เป็นค่าคงที่และค่าของมันจะเท่ากับ 3.14 โดยประมาณ เราจะขอให้ผู้ใช้ป้อนค่าของรัศมี และเราจะคำนวณพื้นที่ของวงกลมโดยใช้สูตร KaTeX parse error: $ ในโหมดคณิตศาสตร์และเราจะพิมพ์พื้นที่ของวงกลม ที่นี่เราใช้ค่าของ pi ซึ่งถูกประกาศเป็นค่าคงที่ที่จุดเริ่มต้นของโค้ด

ผลลัพธ์ของรหัสข้างต้นเป็นดังนี้:


#define Preprocessor Directive


ดังที่เราได้เห็นในตัวอย่างก่อนหน้านี้ว่าในขณะที่ใช้คีย์เวิร์ด const เราควรทำตามไวยากรณ์ของประเภทข้อมูล const ชื่อตัวแปร =ค่า; . สมมติว่าในโค้ดของเราเราได้สร้างโครงสร้างและเราจำเป็นต้องใช้โครงสร้างสำหรับหลาย ๆ กรณีในโปรแกรม จากนั้นจึงเป็นเรื่องยุ่งยากที่จะใช้ คีย์เวิร์ด const ใหญ่ ซ้ำแล้วซ้ำอีกในโปรแกรมของเรา ดังนั้นเราจึงใช้ประโยชน์จาก #define ตัวประมวลผลล่วงหน้าเพื่อสร้างชื่อแทนสำหรับตัวแปรที่มีอยู่

#define คำสั่งตัวประมวลผลล่วงหน้าในภาษา C อยู่ภายใต้หัวข้อคำจำกัดความของมาโคร ในบทความนี้ เราจะพูดถึงวิธีการใช้ คำสั่ง #define preprocessor และเราจะพูดถึงคำจำกัดความของมาโครในบทความอื่นๆ

ในขณะที่ใช้ #define preprocessor เราต้องจำบางสิ่งไว้

  • ควรประกาศค่าคงที่ก่อนฟังก์ชันหลัก
  • ข้อผิดพลาดทั่วไปที่เกิดขึ้นในระหว่างการเริ่มต้นของค่าคงที่โดยใช้ #define ตัวประมวลผลล่วงหน้าคือการเพิ่มเครื่องหมายอัฒภาคที่ส่วนท้ายของการประกาศ ไม่ควรเพิ่มเครื่องหมายอัฒภาคที่ส่วนท้ายของการประกาศค่าคงที่โดยใช้ #define preprocessor

ให้เราดูไวยากรณ์เพื่อกำหนดค่าคงที่โดยใช้คีย์เวิร์ด #define

#define constant_name value

ให้เราดูตัวอย่างเพื่อทำความเข้าใจวิธีสร้างค่าคงที่โดยใช้ #define :

#include <stdio.h>
#define pi 3.14
int main() {
   float radius;
   scanf("%f", &radius);
   printf("The area of circle is: %f",  pi * radius * radius);
   return 0;
}


ในโค้ดด้านบนนี้ เรากำลังพยายามคำนวณพื้นที่ของวงกลมแบบเดียวกับที่เราทำในตัวอย่างก่อนหน้านี้ แต่คราวนี้ เราจะใช้คำสั่ง#define ตัวประมวลผลล่วงหน้า ผลลัพธ์ของรหัสข้างต้นเป็นดังนี้:

จนถึงตอนนี้ เราได้เห็นแล้วว่าค่าคงที่คืออะไร ประเภทของค่าคงที่ และวิธีประกาศค่าคงที่ คุณคงอยากรู้ว่าเกิดอะไรขึ้นถ้าเราพยายามเปลี่ยนค่าคงที่ ให้เราลองเปลี่ยนค่าคงที่ในโปรแกรมด้านล่าง

#include<stdio.h>
int main(){
    const int a = 5;
    a = 25;
}


ผลลัพธ์ของรหัสข้างต้นเป็นดังนี้:


ดังที่เราเห็นได้ว่าคอมไพเลอร์แสดงข้อผิดพลาดโดยบอกว่าค่าของ a ต้องเป็น ค่าที่แก้ไขได้

credit : https://www.scaler.com/topics/c/

Leave a Reply

Your email address will not be published. Required fields are marked *