คลาสพื้นที่เก็บข้อมูลใน C: อัตโนมัติ, ภายนอก, คงที่, รีจิสเตอร์ (ตัวอย่าง)
Storage Class ใน C คืออะไร?
คลาสการจัดเก็บข้อมูลแสดงถึงการมองเห็นและตำแหน่งของตัวแปร คลาสนี้จะบอกให้เราทราบว่าเราสามารถเข้าถึงตัวแปรได้จากส่วนใดของโค้ด คลาสการจัดเก็บข้อมูลใน C ใช้เพื่ออธิบายสิ่งต่อไปนี้:
- ขอบเขตตัวแปร
- ตำแหน่งที่จะจัดเก็บตัวแปร
- ค่าเริ่มต้นของตัวแปร
- อายุการใช้งานของตัวแปร
- ใครสามารถเข้าถึงตัวแปรได้บ้าง?
ดังนั้นคลาสการจัดเก็บข้อมูลจึงถูกใช้เพื่อแสดงข้อมูลเกี่ยวกับตัวแปร
หมายเหตุ: ตัวแปรไม่เพียงแต่เชื่อมโยงกับ a เท่านั้น ประเภทข้อมูลค่าของมัน แต่ยังเป็นคลาสการจัดเก็บข้อมูลด้วย
ประเภทของคลาสการจัดเก็บข้อมูลในภาษา C คืออะไร?
คลาสพื้นที่จัดเก็บข้อมูลมาตรฐานมีทั้งหมดสี่ประเภท ตารางด้านล่างแสดงถึงคลาสการจัดเก็บข้อมูลในภาษาซี
ชั้นเก็บของ | จุดมุ่งหมาย |
---|---|
รถยนต์ | เป็นคลาสการจัดเก็บข้อมูลเริ่มต้น |
extern | มันเป็นตัวแปรระดับโลก |
คงที่ | เป็นตัวแปรท้องถิ่นซึ่งสามารถส่งกลับค่าได้แม้ว่าการควบคุมจะถูกโอนไปยังการเรียกใช้ฟังก์ชันก็ตาม |
ทะเบียน | เป็นตัวแปรที่เก็บไว้ในรีจิสเตอร์ |
คลาสการจัดเก็บอัตโนมัติใน C
ตัวแปรที่กำหนดโดยใช้คลาสการจัดเก็บข้อมูลอัตโนมัติเรียกว่าเป็นตัวแปรภายในเครื่อง Auto ย่อมาจากคลาสการจัดเก็บอัตโนมัติ ตัวแปรอยู่ในคลาสพื้นที่จัดเก็บอัตโนมัติตามค่าเริ่มต้น หากไม่ได้ระบุไว้อย่างชัดเจน
ขอบเขตของตัวแปรอัตโนมัติถูกจำกัดเฉพาะบล็อกนั้น ๆ เท่านั้น เมื่อการควบคุมออกจากบล็อกแล้ว การเข้าถึงจะถูกลบ ซึ่งหมายความว่าเฉพาะบล็อกที่ประกาศตัวแปรอัตโนมัติเท่านั้นที่จะเข้าถึงตัวแปรได้
คำหลัก auto ใช้เพื่อกำหนดคลาสการจัดเก็บข้อมูลอัตโนมัติ ตามค่าเริ่มต้น ตัวแปรอัตโนมัติมีค่าขยะ
Example, auto int age;
โปรแกรมด้านล่างกำหนดฟังก์ชันที่มีตัวแปรท้องถิ่นสองตัว
int add(void) { int a=13; auto int b=48; return a+b;}
เราใช้โปรแกรมอื่นที่แสดงระดับขอบเขต "ระดับการมองเห็น" สำหรับตัวแปรอัตโนมัติในแต่ละรหัสบล็อกซึ่งแยกจากกัน:
#include <stdio.h> int main( ) { auto int j = 1; { auto int j= 2; { auto int j = 3; printf ( " %d ", j); } printf ( "\t %d ",j); } printf( "%d\n", j);}
เอาท์พุท:
3 2 1
คลาสการจัดเก็บข้อมูลภายนอกใน C
Extern ย่อมาจากคลาสการจัดเก็บข้อมูลภายนอก คลาสการจัดเก็บข้อมูลภายนอกถูกใช้เมื่อเรามีฟังก์ชันโกลบอลหรือตัวแปรที่แชร์ระหว่างไฟล์ตั้งแต่สองไฟล์ขึ้นไป
คำหลัก extern ใช้ในการประกาศตัวแปรหรือฟังก์ชันโกลบอลในไฟล์อื่นเพื่อให้การอ้างอิงตัวแปรหรือฟังก์ชันที่ได้กำหนดไว้ในไฟล์ต้นฉบับแล้ว
ตัวแปรที่กำหนดโดยใช้คำสำคัญภายนอกเรียกว่าตัวแปรร่วม ตัวแปรเหล่านี้สามารถเข้าถึงได้ตลอดทั้งโปรแกรม โปรดสังเกตว่าตัวแปรภายนอกไม่สามารถเริ่มต้นได้เนื่องจากได้ถูกกำหนดไว้ในไฟล์ต้นฉบับแล้ว
Example, extern void display();
ไฟล์แรก: main.c
#include <stdio.h> extern i; main() { printf("value of the external integer is = %d\n", i); return 0;}
ไฟล์ที่สอง: original.c
#include <stdio.h> i=48;
ผลลัพธ์:
value of the external integer is = 48
เพื่อคอมไพล์และรันโค้ดข้างต้น ให้ทำตามขั้นตอนด้านล่าง
ขั้นตอน 1) สร้างโครงการใหม่
- เลือกแอปพลิเคชันคอนโซล
- ClickGo
ขั้นตอน 2) เลือก C และคลิกถัดไป
ขั้นตอน 3) คลิกถัดไป
ขั้นตอน 4) กรอกรายละเอียดและคลิกถัดไป
ขั้นตอน 5) คลิกเสร็จสิ้น
ขั้นตอน 6) ใส่รหัสหลักตามที่แสดงในโปรแกรมก่อนหน้าในไฟล์ main.c แล้วบันทึก
ขั้นตอน 7) สร้างไฟล์ C ใหม่ [File -> new -> Empty File ] บันทึก (เป็น original.c) และเพิ่มลงในโปรเจ็กต์ปัจจุบันโดยคลิก “OK” ในกล่องโต้ตอบ
ขั้นตอน 8) ใส่และบันทึกโค้ด C ของไฟล์ original.c ที่แสดงในตัวอย่างก่อนหน้าโดยไม่ต้องใช้ฟังก์ชัน main()
ขั้นตอน 9) สร้างและดำเนินโครงการของคุณ ผลลัพธ์จะแสดงในรูปถัดไป
คลาสการจัดเก็บแบบคงที่ใน C
ตัวแปรคงที่ถูกใช้ภายในฟังก์ชัน/ ไฟล์เป็นตัวแปรคงที่ในเครื่อง พวกเขายังสามารถใช้เป็น ตัวแปรส่วนกลาง
- ตัวแปรท้องถิ่นแบบคงที่คือตัวแปรท้องถิ่นที่รักษาและจัดเก็บค่าของมันระหว่างการเรียกใช้ฟังก์ชันหรือบล็อก และยังคงมองเห็นได้เฉพาะกับฟังก์ชันหรือบล็อกที่กำหนดไว้เท่านั้น
- ตัวแปรส่วนกลางแบบคงที่คือตัวแปรส่วนกลางที่มองเห็นได้ เฉพาะไฟล์ที่ประกาศไว้เท่านั้น
Example: static int count = 10;
โปรดทราบว่าตัวแปรคงที่มีค่าเริ่มต้นเป็นศูนย์และจะเริ่มต้นได้เพียงครั้งเดียวตลอดอายุการใช้งาน
#include <stdio.h> /* function declaration */ void next(void); static int counter = 7; /* global variable */ main() { while(counter<10) { next(); counter++; } return 0;} void next( void ) { /* function definition */ static int iteration = 13; /* local static variable */ iteration ++; printf("iteration=%d and counter= %d\n", iteration, counter);}
ผลลัพธ์:
iteration=14 and counter= 7 iteration=15 and counter= 8 iteration=16 and counter= 9
ตัวแปรส่วนกลางสามารถเข้าถึงได้ทั่วทั้งไฟล์ ในขณะที่ตัวแปรแบบคงที่สามารถเข้าถึงได้เฉพาะบางส่วนของโค้ดเท่านั้น
อายุการใช้งานของตัวแปรคงที่จะอยู่ในโค้ดโปรแกรมทั้งหมด ตัวแปรที่ถูกประกาศหรือเริ่มต้นโดยใช้คีย์เวิร์ดแบบคงที่จะมีศูนย์เป็นค่าเริ่มต้นเสมอ
ลงทะเบียนคลาสการจัดเก็บใน C
คุณสามารถใช้คลาสหน่วยเก็บข้อมูลรีจิสเตอร์เมื่อคุณต้องการจัดเก็บตัวแปรโลคัลภายในฟังก์ชันหรือบล็อกในรีจิสเตอร์ CPU แทน แรม เพื่อให้เข้าถึงตัวแปรเหล่านี้ได้อย่างรวดเร็ว ตัวอย่างเช่น "ตัวนับ" เป็นตัวเลือกที่ดีที่จะจัดเก็บไว้ในทะเบียน
Example: register int age;
คีย์เวิร์ด ทะเบียน ใช้ในการประกาศคลาสหน่วยเก็บข้อมูลรีจิสเตอร์ ตัวแปรที่ประกาศโดยใช้คลาสหน่วยเก็บข้อมูลรีจิสเตอร์จะมีอายุการใช้งานตลอดทั้งโปรแกรม
คล้ายกับคลาสจัดเก็บข้อมูลอัตโนมัติ ตัวแปรถูกจำกัดไว้ที่บล็อกเฉพาะ ข้อแตกต่างเพียงอย่างเดียวคือตัวแปรที่ประกาศโดยใช้คลาสหน่วยเก็บข้อมูลรีจิสเตอร์จะถูกจัดเก็บไว้ในรีจิสเตอร์ CPU แทนที่จะเป็นหน่วยความจำ Register มีการเข้าถึงได้เร็วกว่าหน่วยความจำหลัก
ตัวแปรที่ประกาศโดยใช้คลาสหน่วยเก็บข้อมูลรีจิสเตอร์ไม่มีค่าเริ่มต้น ตัวแปรเหล่านี้มักถูกประกาศไว้ที่จุดเริ่มต้นของโปรแกรม
#include <stdio.h> /* function declaration */ main() { {register int weight; int *ptr=&weight ;/*it produces an error when the compilation occurs ,we cannot get a memory location when dealing with CPU register*/} }
เอาท์พุท:
error: address of register variable 'weight' requested
ตารางต่อไปนี้จะสรุปคุณลักษณะหลักของแต่ละคลาสการจัดเก็บข้อมูลซึ่งมักใช้ในการเขียนโปรแกรม C
ชั้นเก็บข้อมูล | การประกาศ | พื้นที่จัดเก็บ | ค่าเริ่มต้นเริ่มต้น | ขอบเขต | ตลอดชีวิต |
---|---|---|---|---|---|
รถยนต์ | ภายในฟังก์ชัน/บล็อก | หน่วยความจำ | ทายไม่ถูก | ภายในฟังก์ชัน/บล็อก | ภายในฟังก์ชัน/บล็อก |
ทะเบียน | ภายในฟังก์ชัน/บล็อก | การลงทะเบียน CPU | ขยะ | ภายในฟังก์ชัน/บล็อก | ภายในฟังก์ชัน/บล็อก |
extern | นอกเหนือฟังก์ชั่นทั้งหมด | หน่วยความจำ | ศูนย์ | ไฟล์ทั้งหมดและไฟล์อื่นๆ ที่ตัวแปรถูกประกาศเป็นไฟล์ภายนอก | รันไทม์ของโปรแกรม |
คงที่ (ท้องถิ่น) | ภายในฟังก์ชัน/บล็อก | หน่วยความจำ | ศูนย์ | ภายในฟังก์ชัน/บล็อก | รันไทม์ของโปรแกรม |
คงที่ (ทั่วโลก) | นอกเหนือฟังก์ชั่นทั้งหมด | หน่วยความจำ | ศูนย์ | เหตุการณ์ที่ | รันไทม์ของโปรแกรม |
สรุป
ในบทช่วยสอนนี้ เราได้พูดถึงคลาสพื้นที่จัดเก็บข้อมูลในภาษา C เพื่อสรุป:
- คลาสการจัดเก็บข้อมูลในภาษา C ใช้เพื่อแสดงข้อมูลเพิ่มเติมเกี่ยวกับตัวแปร
- คลาสการจัดเก็บข้อมูลแสดงถึงขอบเขตและอายุการใช้งานของตัวแปร
- นอกจากนี้ยังบอกด้วยว่าใครสามารถเข้าถึงตัวแปรได้จากที่ไหน?
- Auto, extern, register, static เป็นคลาสการจัดเก็บข้อมูลที่แตกต่างกันสี่คลาสในโปรแกรม C
- ตัวระบุคลาสการจัดเก็บข้อมูลใน ภาษาซี ใช้ในการกำหนดตัวแปร ฟังก์ชัน และพารามิเตอร์
- auto ใช้สำหรับตัวแปรท้องถิ่นที่กำหนดภายในบล็อกหรือฟังก์ชัน
- register ใช้เพื่อจัดเก็บตัวแปรใน CPU register แทนที่จะเป็นตำแหน่งหน่วยความจำสำหรับการเข้าถึงที่รวดเร็ว
- คงที่ใช้สำหรับทั้งตัวแปรส่วนกลางและตัวแปรท้องถิ่น แต่ละอันมีกรณีการใช้งานภายในโปรแกรม C
- Extern ใช้สำหรับการแชร์ข้อมูลระหว่างไฟล์โครงการ C