คลาสการจัดเก็บระบุขอบเขต อายุการใช้งาน และการเชื่อมโยงของตัวแปร
ในการกำหนดตัวแปรอย่างสมบูรณ์ เราต้องไม่เพียงแค่พูดถึง "ประเภท" เท่านั้น แต่ยังรวมถึงคลาสพื้นที่เก็บข้อมูลด้วย
ชื่อตัวแปรระบุตำแหน่งทางกายภาพบางส่วนภายในหน่วยความจำคอมพิวเตอร์ โดยที่ชุดของบิตจะถูกจัดสรรเพื่อจัดเก็บค่าของตัวแปร
คลาสพื้นที่เก็บข้อมูลบอกเราถึงปัจจัยต่อไปนี้ −
- เก็บตัวแปรไว้ที่ใด (ในหน่วยความจำหรือ cpu register)
- ค่าเริ่มต้นของตัวแปรจะเป็นอย่างไร หากไม่มีการกำหนดค่าเริ่มต้น
- ขอบเขตของตัวแปรคืออะไร (เข้าถึงได้)
- ชีวิตของตัวแปรคืออะไร?
อายุการใช้งาน
อายุการใช้งานของตัวแปรกำหนดระยะเวลาที่คอมพิวเตอร์จัดสรรหน่วยความจำให้ (ระยะเวลาระหว่างการจัดสรรและการจัดสรรคืนหน่วยความจำ)
ในภาษา C ตัวแปรสามารถมีอายุการใช้งานแบบอัตโนมัติ แบบคงที่ หรือแบบไดนามิก
- อัตโนมัติ − ตัวแปรที่มีอายุการใช้งานอัตโนมัติจะถูกสร้างขึ้น ทุกครั้งที่มีการเผชิญหน้าและทำลายคำประกาศของพวกเขา นอกจากนี้ บล็อกของพวกมันก็ถูกปิดลง
- คงที่ − ตัวแปรจะถูกสร้างขึ้นเมื่อมีการดำเนินการประกาศเป็นครั้งแรก จะถูกทำลายเมื่อการดำเนินการหยุด/สิ้นสุด
- ไดนามิก − หน่วยความจำตัวแปรได้รับการจัดสรรและจัดสรรคืนผ่านฟังก์ชันการจัดการหน่วยความจำ
คลาสการจัดเก็บ
มีสี่คลาสการจัดเก็บในภาษา C -
| คลาสการจัดเก็บ | พื้นที่จัดเก็บ | ค่าเริ่มต้นเริ่มต้น | อายุการใช้งาน | ขอบเขต | คำหลัก |
|---|---|---|---|---|---|
| อัตโนมัติ | หน่วยความจำ | จนกว่าการควบคุมยังคงอยู่ในบล็อก | จนกว่าการควบคุมยังคงอยู่ในบล็อก | ท้องถิ่น | อัตโนมัติ |
| ลงทะเบียน | รีจิสเตอร์ซีพียู | มูลค่าขยะ | จนกว่าการควบคุมยังคงอยู่ในบล็อก | ท้องถิ่น | ลงทะเบียน |
| คงที่ | หน่วยความจำ | ศูนย์ | ค่าระหว่างการเรียกใช้ฟังก์ชัน | ท้องถิ่น | คงที่ |
| ภายนอก | หน่วยความจำ | มูลค่าขยะ | ตลอดการทำงานของโปรแกรม | ทั่วโลก | ภายนอก |
ตัวอย่าง
ต่อไปนี้เป็นโปรแกรม C สำหรับคลาสการจัดเก็บอัตโนมัติ -
#include<stdio.h>
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
ตัวอย่าง
ต่อไปนี้เป็นโปรแกรม C สำหรับคลาสการจัดเก็บข้อมูลภายนอก -
#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);
} ผลลัพธ์
เมื่อโปรแกรมข้างต้นทำงาน มันจะสร้างผลลัพธ์ต่อไปนี้ -
3 1