ปัญหา
คลาสการจัดเก็บที่แตกต่างกันในภาษา 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