ปัญหา
คลาสการจัดเก็บที่แตกต่างกันในภาษา C มีอะไรบ้าง อธิบายด้วยโปรแกรมไหม
วิธีแก้ปัญหา
คลาสการจัดเก็บถูกกำหนดให้เป็นขอบเขตและอายุการใช้งานของตัวแปรหรือฟังก์ชันที่มีอยู่ในโปรแกรม C
คลาสการจัดเก็บ
ต่อไปนี้เป็นคลาสการจัดเก็บใน C −
- อัตโนมัติ
- ภายนอก
- คงที่
- ลงทะเบียน
ตัวแปรอัตโนมัติ/ตัวแปรภายในเครื่อง
- คำหลัก − อัตโนมัติ
- เรียกอีกอย่างว่าตัวแปรท้องถิ่น
- ขอบเขต −
-
ขอบเขตของตัวแปรภายในมีอยู่ในบล็อกที่มีการประกาศ
-
ตัวแปรเหล่านี้ถูกประกาศภายในบล็อก
-
- ค่าเริ่มต้น − ค่าขยะ
ตัวอย่าง
#include<stdio.h>
void main (){
auto int i=1;{
auto int i=2;{
auto int i=3;
printf ("%d",i);
}
printf("%d", i);
}
printf("%d", i);
} ผลลัพธ์
3 2 1
ตัวแปรส่วนกลาง/ตัวแปรภายนอก
- คำหลัก − ภายนอก
-
ตัวแปรเหล่านี้ถูกประกาศนอกบล็อก ดังนั้นจึงเรียกอีกอย่างว่าตัวแปรส่วนกลาง
-
ขอบเขต − ขอบเขตของตัวแปรส่วนกลางสามารถใช้ได้ตลอดทั้งโปรแกรม
- ค่าเริ่มต้น − ศูนย์
ตัวอย่าง
#include<stdio.h>
extern int i =1; /* this ‘i’ is available throughout program */
main (){
int i = 3; /* this ‘i' available only in main */
printf ("%d", i);
fun ();
}
fun (){
printf ("%d", i);
} ผลลัพธ์
31
ตัวแปรคงที่
- คำหลัก − คงที่
- ขอบเขต − ขอบเขตของตัวแปรสแตติกคือรักษาค่าไว้ตลอดทั้งโปรแกรมและระหว่างการเรียกใช้ฟังก์ชัน
- ตัวแปรสแตติกเริ่มต้นเพียงครั้งเดียว
- ค่าเริ่มต้น − ศูนย์
ตัวอย่าง
#include<stdio.h>
main (){
inc ();
inc ();
inc ();
}
inc (){
static int i =1;
printf ("%d", i);
i++;
} ผลลัพธ์
1 2 3
ลงทะเบียนตัวแปร
- คำหลัก − ลงทะเบียน
-
ค่าตัวแปร Register จะถูกเก็บไว้ในการลงทะเบียน CPU มากกว่าในหน่วยความจำที่เก็บตัวแปรปกติไว้
-
รีจิสเตอร์เป็นหน่วยเก็บข้อมูลชั่วคราวใน CPU
ตัวอย่าง
#include<stdio.h>
main (){
register int i;
for (i=1; i< =5; i++)
printf ("%d",i);
} ผลลัพธ์
1 2 3 4 5