ตัวแปรโลคอล โกลบอล ภาษา C
ขอบเขตในการเขียนโปรแกรมใด ๆ คือขอบเขตของโปรแกรมที่ตัวแปรที่กำหนดไว้สามารถมีอยู่ได้และไม่สามารถเข้าถึงได้นอกตัวแปรนั้น มีสามแห่งที่สามารถประกาศตัวแปรในภาษาซีได้ −
- ภายในฟังก์ชันหรือบล็อกที่เรียกว่าตัวแปรโลคอล (Local)
- นอกฟังก์ชันทั้งหมดที่เรียกว่าตัวแปรโกลบอล (Global)
- ในนิยามของพารามิเตอร์ฟังก์ชันที่เรียกว่าพารามิเตอร์ที่เป็นทางการ (Formal)
ให้เราเข้าใจว่า ตัวแปรโลคอล (Local) และ ตัวแปรโกลบอล (Global) คืออะไร และพารามิเตอร์ที่เป็นทางการ (formal) คืออะไร
ตัวแปรโลคอล (Local)
ตัวแปรที่ประกาศภายในฟังก์ชันหรือบล็อกเรียกว่าตัวแปรโลคอล สามารถใช้โดยคำสั่งที่อยู่ภายในฟังก์ชันหรือบล็อกของโค้ดเท่านั้น ตัวแปรโลคอลไม่รู้จักฟังก์ชันภายนอกของตนเอง ตัวอย่างต่อไปนี้แสดงวิธีการใช้ ตัวแปรโลคอล ตัวแปร a, b และ c ทั้งหมดนี้เป็นฟังก์ชัน local to main()
#include <stdio.h>
int main () {
/* local variable declaration */
int a, b;
int c;
/* actual initialization */
a = 10;
b = 20;
c = a + b;
printf ("value of a = %d, b = %d and c = %d\n", a, b, c);
return 0;
}
ตัวแปรโกลบอล (Global)
ตัวแปรโกลบอลถูกกำหนดไว้นอกฟังก์ชัน ซึ่งมักจะอยู่ด้านบนของโปรแกรม ตัวแปรโกลบอล จะเก็บค่าไว้ตลอดอายุของโปรแกรม และสามารถเข้าถึงได้ภายในฟังก์ชันที่กำหนดไว้สำหรับโปรแกรม
ตัวแปรโกลบอลสามารถเข้าถึงได้โดยฟังก์ชันใดก็ได้ กล่าวคือ ตัวแปรโกลบอลสามารถใช้ได้ทั่วทั้งโปรแกรมของคุณหลังจากการประกาศ โปรแกรมต่อไปนี้แสดงวิธีการใช้ ตัวแปรโกลบอล ในโปรแกรม
#include <stdio.h>
/* global variable declaration */
int g;
int main () {
/* local variable declaration */
int a, b;
/* actual initialization */
a = 10;
b = 20;
g = a + b;
printf ("value of a = %d, b = %d and g = %d\n", a, b, g);
return 0;
}
โปรแกรมสามารถมีชื่อเดียวกันสำหรับตัวแปรโลคอล (Local) และตัวแปรโกลบอล (Global) แต่ค่าของตัวแปรโลคอลภายในฟังก์ชันจะถูกนำมาใช้ตามความชอบ นี่คือตัวอย่าง −
#include <stdio.h>
/* global variable declaration */
int g = 20;
int main () {
/* local variable declaration */
int g = 10;
printf ("value of g = %d\n", g);
return 0;
}
เมื่อโค้ดด้านบนถูกคอมไพล์และรัน มันจะให้ผลลัพธ์ดังต่อไปนี้ −
value of g = 10
พารามิเตอร์ที่เป็นทางการ (Formal Parameters)
พารามิเตอร์ที่เป็นทางการ จะถือเป็นตัวแปรภายในที่มีฟังก์ชันและจะมีความสำคัญเหนือกว่า ตัวแปรโกลบอล ต่อไปนี้เป็นตัวอย่าง −
#include <stdio.h>
/* global variable declaration */
int a = 20;
int main () {
/* local variable declaration in main function */
int a = 10;
int b = 20;
int c = 0;
printf ("value of a in main() = %d\n", a);
c = sum( a, b);
printf ("value of c in main() = %d\n", c);
return 0;
}
/* function to add two integers */
int sum(int a, int b) {
printf ("value of a in sum() = %d\n", a);
printf ("value of b in sum() = %d\n", b);
return a + b;
}
เมื่อโค้ดด้านบนถูกคอมไพล์และรัน มันจะให้ผลลัพธ์ดังต่อไปนี้ −
value of a in main() = 10
value of a in sum() = 10
value of b in sum() = 20
value of c in main() = 30
การเริ่มต้น ตัวแปรโลคอลและ โกลบอล
เมื่อมีการกำหนดตัวแปร โลคอล ตัวแปรนั้นจะไม่เริ่มต้น โดยระบบ คุณต้องเริ่มต้นด้วยตัวเอง แต่ระบบจะเริ่มต้นตัวแปร โกลบอล โดยอัตโนมัติเมื่อคุณกำหนดตัวแปรดังนี้ −
Data Type | Initial Default Value |
---|---|
int | 0 |
char | ‘\0’ |
float | 0 |
double | 0 |
pointer | NULL |
แนวปฏิบัติในการเขียนโปรแกรมที่ดีคือการเริ่มต้นตัวแปรอย่างเหมาะสม มิฉะนั้น โปรแกรมของคุณอาจสร้างผลลัพธ์ที่ไม่คาดคิด เนื่องจากตัวแปรที่ไม่ได้กำหนดค่าเริ่มต้นจะรับค่าขยะบางส่วนที่มีอยู่แล้วที่ตำแหน่งหน่วยความจำ