ตัวแปร ภาษา C เป็นเพียงชื่อที่กำหนดให้กับพื้นที่เก็บข้อมูลที่โปรแกรมของเราสามารถจัดการได้ ตัวแปรแต่ละตัวในภาษา C จะมีชนิดเฉพาะ ซึ่งจะกำหนดขนาดและเลย์เอาต์ของหน่วยความจำของตัวแปร ช่วงของค่าที่สามารถเก็บไว้ในหน่วยความจำนั้น และชุดของการดำเนินการที่สามารถนำไปใช้กับตัวแปรได้
ชื่อของตัวแปรประกอบด้วยตัวอักษร ตัวเลข และเครื่องหมายขีดล่าง ต้องขึ้นต้นด้วยตัวอักษรหรือขีดล่าง ตัวอักษรตัวพิมพ์ใหญ่และตัวพิมพ์เล็กมีความแตกต่างกันเนื่องจาก C คำนึงถึงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ ตามประเภทพื้นฐานที่ได้อธิบายไว้ในบทที่แล้ว จะมีประเภทตัวแปรพื้นฐานดังต่อไปนี้ −
Sr.No. | Type & Description |
---|---|
1 | char โดยทั่วไปแล้วเป็นออคเต็ตเดียว (หนึ่งไบต์) เป็นชนิดจำนวนเต็ม |
2 | int ข้อมูลชนิดเลขจำนวนเต็ม |
3 | float ข้อมูลชนิดเลขทศนิยม |
4 | double ข้อมูลชนิดเลขทศนิยมความแม่นยำสองเท่า |
5 | void แสดงถึงการไม่มีชนิด |
การเขียนโปรแกรมภาษา C ยังช่วยให้กำหนดตัวแปรชนิดอื่นๆ ได้ ซึ่งเราจะกล่าวถึงในบทต่อๆ ไป เช่น การแจงนับ ตัวชี้ อาร์เรย์ โครงสร้าง ยูเนี่ยน ฯลฯ สำหรับบทนี้ ให้เราศึกษาเฉพาะชนิดตัวแปรพื้นฐานเท่านั้น
Variable Definition in C (นิยามตัวแปรใน C)
คำจำกัดความของตัวแปรจะบอกคอมไพเลอร์ว่าจะสร้างที่เก็บข้อมูลของตัวแปรได้ที่ไหนและเท่าใด คำจำกัดความของตัวแปรระบุชนิดข้อมูลและมีรายการตัวแปรชนิดนั้นตั้งแต่หนึ่งตัวขึ้นไปดังนี้ −
type variable_list;
ที่นี่ type ต้องเป็นประเภทข้อมูล C ที่ถูกต้อง รวมถึง char, w_char, int, float, double, bool หรืออ็อบเจกต์ที่ผู้ใช้กำหนด และ variable_list อาจประกอบด้วยชื่อตัวระบุตั้งแต่หนึ่งชื่อขึ้นไปโดยคั่นด้วยเครื่องหมายจุลภาค แสดงประกาศที่ถูกต้องบางส่วนที่นี่ −
int i, j, k;
char c, ch;
float f, salary;
double d;
ตัวอย่างด้านบน ประกาศและกำหนดตัวแปร i, j และ k; ซึ่งสั่งให้คอมไพเลอร์สร้างตัวแปรชื่อ i, j และ k เป็นชนิด int
ตัวแปรสามารถเริ่มต้นได้ (กำหนดค่าเริ่มต้น) ในการประกาศ ตัวเริ่มต้นประกอบด้วยเครื่องหมายเท่ากับตามด้วยนิพจน์คงที่ดังต่อไปนี้
type variable_name = value;
ตัวอย่างบางส่วน ได้แก่ −
extern int d = 3, f = 5; // declaration of d and f.
int d = 3, f = 5; // definition and initializing d and f.
byte z = 22; // definition and initializes z.
char x = 'x'; // the variable x has the value 'x'.
สำหรับคำจำกัดความที่ไม่มีตัวกำหนดค่าเริ่มต้น: ตัวแปรที่มีระยะเวลาการจัดเก็บแบบคงที่จะถูกกำหนดค่าเริ่มต้นโดยปริยายด้วยค่า NULL (ไบต์ทั้งหมดมีค่าเป็น 0) ค่าเริ่มต้นของตัวแปรอื่น ๆ ทั้งหมดไม่ได้กำหนดไว้
การประกาศตัวแปรใน C
การประกาศตัวแปรมีประโยชน์เมื่อคุณใช้หลายไฟล์และคุณกำหนดตัวแปรของคุณในไฟล์ใดไฟล์หนึ่งซึ่งจะพร้อมใช้งานในขณะที่ทำการเชื่อมโยงโปรแกรม คุณจะใช้คีย์เวิร์ด extern เพื่อประกาศตัวแปรที่ใดก็ได้ แม้ว่าคุณสามารถประกาศตัวแปรได้หลายครั้งในโปรแกรม C ของคุณ แต่ก็สามารถกำหนดได้เพียงครั้งเดียวในไฟล์ ฟังก์ชัน หรือบล็อกของโค้ด
การใช้ extern เพื่อใช้ตัวแปรร่วมกันระหว่างไฟล์
ถ้าหากว่าเรามีตัวแปรที่ต้องการใช้ร่วมกันในไฟล์ .c หลายๆไฟล์ เราก็น่าจะเอาไปประกาศใน header ไฟล์ได้เลยหรือไม่ คำตอบคือประกาศเฉยๆ ไม่ได้ แต่ต้องใส่ extern ด้วย เพราะตัวแปรไม่เหมือนกับ function การประกาศ prototype ของ function ใดๆนั้น เป็นแค่การบอกให้ compiler รู้ว่า function นั้นหน้าตาเป็นยังไง ต้องมี input เป็นอะไร และจะ return อะไรกลับมา การกระโดดเข้าไปทำงาน function นั้นแล้วกลับออกมาจะได้ทำได้ถูก แต่การประกาศตัวแปรนั้นเป็นการจองพื้นที่ เป็นการสร้าง object ของตัวแปรนั้นขึ้นมา ซึ่งถ้าเราใส่ใน header แล้วหลายๆไฟล์มีการนำไป include จะทำให้เกิดการสร้าง object ขึ้นมาหลายๆที่โดยมีชื่อที่ซ้ำกัน ทำให้เกิด error ขึ้น วิธีการที่ถูกต้องคือการใส่ extern เข้าไปด้วย compiler จะไม่สร้าง object ขึ้นมาซ้ำกัน เพราะเราได้บอกกับ compiler เอาไว้ว่าตัวแปรนั้น จริงๆแล้วถูกประกาศไว้ที่อื่น
https://blog.thaieasyelec.com/
การประกาศตัวแปรให้การรับรองแก่คอมไพเลอร์ว่ามีตัวแปรที่มีประเภทและชื่อที่กำหนด เพื่อให้คอมไพเลอร์สามารถดำเนินการรวบรวมต่อไปได้โดยไม่ต้องให้รายละเอียดทั้งหมดเกี่ยวกับตัวแปร คำจำกัดความของตัวแปรมีความหมายในขณะที่คอมไพล์เท่านั้น คอมไพเลอร์ต้องการคำจำกัดความของตัวแปรจริงในขณะที่ทำการเชื่อมโยงโปรแกรม
ตัวอย่าง
ลองตัวอย่างต่อไปนี้ ซึ่งมีการประกาศตัวแปรไว้ที่ด้านบนสุด แต่ถูกกำหนดและเริ่มต้นภายในฟังก์ชันหลักแล้ว:
#include <stdio.h>
// Variable declaration:
extern int a, b;
extern int c;
extern float f;
int main () {
/* variable definition: */
int a, b;
int c;
float f;
/* actual initialization */
a = 10;
b = 20;
c = a + b;
printf("value of c : %d \n", c);
f = 70.0/3.0;
printf("value of f : %f \n", f);
return 0;
}
เมื่อโค้ดด้านบนถูกคอมไพล์และรัน มันจะให้ผลลัพธ์ดังต่อไปนี้ −
แนวคิดเดียวกันนี้ใช้กับการประกาศฟังก์ชันที่คุณระบุชื่อฟังก์ชันในขณะที่มีการประกาศ และสามารถให้คำจำกัดความตามจริงได้จากที่อื่น ตัวอย่างเช่น −
// function declaration
int func();
int main() {
// function call
int i = func();
}
// function definition
int func() {
return 0;
}
Lvalues และ Rvalues ใน C
มีนิพจน์สองประเภทใน C −
- lvalue – นิพจน์ที่อ้างถึงตำแหน่งหน่วยความจำเรียกว่านิพจน์ “lvalue” lvalue อาจปรากฏเป็นด้านซ้ายหรือด้านขวาของงาน
- rvalue – rvalue ระยะหมายถึงค่าข้อมูลที่เก็บไว้ในที่อยู่บางอย่างในหน่วยความจำ rvalue คือนิพจน์ที่ไม่สามารถกำหนดค่าได้ ซึ่งหมายความว่า rvalue อาจปรากฏที่ด้านขวามือ แต่ไม่ปรากฏทางด้านซ้ายของงานที่มอบหมาย
ตัวแปรคือค่า lvalues ดังนั้นจึงอาจปรากฏทางด้านซ้ายมือของงาน ค่าตัวเลขเป็นค่า rvalues ดังนั้นจึงไม่สามารถกำหนดและไม่สามารถปรากฏทางด้านซ้ายมือได้ ดูข้อความที่ถูกต้องและไม่ถูกต้องดังต่อไปนี้ −
int g = 20; // valid statement
10 = 20; // invalid statement; would generate compile-time erro