คลาสพื้นที่เก็บข้อมูลใน 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) สร้างโครงการใหม่

  1. เลือกแอปพลิเคชันคอนโซล
  2. ClickGo

คลาสการจัดเก็บข้อมูลภายนอกใน C

ขั้นตอน 2) เลือก C และคลิกถัดไป

คลาสการจัดเก็บข้อมูลภายนอกใน C

ขั้นตอน 3) คลิกถัดไป

คลาสการจัดเก็บข้อมูลภายนอกใน C

ขั้นตอน 4) กรอกรายละเอียดและคลิกถัดไป

คลาสการจัดเก็บข้อมูลภายนอกใน C

ขั้นตอน 5) คลิกเสร็จสิ้น

คลาสการจัดเก็บข้อมูลภายนอกใน C

ขั้นตอน 6) ใส่รหัสหลักตามที่แสดงในโปรแกรมก่อนหน้าในไฟล์ main.c แล้วบันทึก

คลาสการจัดเก็บข้อมูลภายนอกใน C

ขั้นตอน 7) สร้างไฟล์ C ใหม่ [File -> new -> Empty File ] บันทึก (เป็น original.c) และเพิ่มลงในโปรเจ็กต์ปัจจุบันโดยคลิก “OK” ในกล่องโต้ตอบ

คลาสการจัดเก็บข้อมูลภายนอกใน C

ขั้นตอน 8) ใส่และบันทึกโค้ด C ของไฟล์ original.c ที่แสดงในตัวอย่างก่อนหน้าโดยไม่ต้องใช้ฟังก์ชัน main()

คลาสการจัดเก็บข้อมูลภายนอกใน C

ขั้นตอน 9) สร้างและดำเนินโครงการของคุณ ผลลัพธ์จะแสดงในรูปถัดไป

คลาสการจัดเก็บข้อมูลภายนอกใน C

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