คลาสการจัดเก็บระบุขอบเขต อายุการใช้งาน และการเชื่อมโยงของตัวแปร
ในการกำหนดตัวแปรอย่างสมบูรณ์ เราต้องไม่เพียงแค่พูดถึง "ประเภท" เท่านั้น แต่ยังรวมถึงคลาสพื้นที่เก็บข้อมูลด้วย
ชื่อตัวแปรระบุตำแหน่งทางกายภาพบางส่วนภายในหน่วยความจำคอมพิวเตอร์ โดยที่ชุดของบิตจะถูกจัดสรรเพื่อจัดเก็บค่าของตัวแปร
คลาสพื้นที่เก็บข้อมูลบอกเราถึงปัจจัยต่อไปนี้ −
- เก็บตัวแปรไว้ที่ใด (ในหน่วยความจำหรือ 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