คลาสสตอเรจใน C: คลาสสตอเรจประเภทต่างๆ [พร้อมตัวอย่าง]
เผยแพร่แล้ว: 2020-10-21การเข้ารหัสด้วยภาษาซีมีศูนย์กลางอยู่ที่การใช้ตัวแปรในทุกโปรแกรม ซึ่งเป็นส่วนสำคัญของการเขียนโปรแกรม C ทุกตัวแปรใน C มีคุณสมบัติสองประการ ประเภทและคลาสการจัดเก็บ ในหมู่พวกเขา ประเภทหมายถึงชนิดข้อมูลของตัวแปร และ คลาสการจัดเก็บใน C จะกำหนดขอบเขต อายุการใช้งาน และการมองเห็นของตัวแปร คลาสการจัดเก็บข้อมูลในภาษา C ถูกใช้เพื่อค้นหาอายุการใช้งาน การมองเห็น ตำแหน่งหน่วยความจำ และค่าเริ่มต้นของตัวแปร
ในบล็อกโพสต์นี้ เราจะมาดูรายละเอียดเกี่ยวกับ คลาสการจัดเก็บข้อมูลใน C ประเภทของคลาส และลักษณะที่มีอิทธิพลต่อผลลัพธ์ของโปรแกรมด้วยตัวอย่างการเขียนโปรแกรม คลาสหน่วยเก็บข้อมูลใน C ถูกใช้เพื่อแสดงข้อมูลของตัวแปร
เรียนรู้การสร้างแอปพลิเคชัน เช่น Swiggy, Quora, IMDB และอื่นๆ
สารบัญ
คลาสการจัดเก็บใน C คืออะไร?
คลาสการจัดเก็บใน C จัดสรรพื้นที่จัดเก็บของตัวแปรที่จะเก็บไว้ในหน่วยความจำ มันถูกเก็บไว้ใน RAM ของระบบ นอกเหนือจากพื้นที่เก็บข้อมูลแล้ว ยังกำหนดขอบเขตของตัวแปรอีกด้วย ตัวแปรในโปรแกรม C จะถูกเก็บไว้ในตำแหน่งทางกายภาพในหน่วยความจำสุ่ม ซึ่งส่วนใหญ่เป็นหน่วยความจำของอุปกรณ์และการลงทะเบียน CPU
คลาสการจัดเก็บใน C ยังกำหนดอายุการใช้งานของตัวแปรและเรียกเป็น 'local' หรือ 'global' คลาสการจัดเก็บยังมีประโยชน์ในการกำหนดขอบเขตหรือการมองเห็น และค่าเริ่มต้นของตัวแปร มีสี่ คลาสการจัดเก็บเป็นหลักใน C ได้แก่ อัตโนมัติ ลง ทะเบียน คง ที่ และ ภายนอก _ เราจะหารือกันทีละคนต่อไป
มีการประกาศคลาสการจัดเก็บใน C อย่างไร
คลาสหน่วยเก็บข้อมูล สี่ คลาสใน C ถูกประกาศในบล็อกหรือโปรแกรมด้วยตัวระบุคลาสหน่วยเก็บข้อมูล อัตโนมัติ รีจิสเตอร์ ภายนอก สแตติก มีตัวระบุคลาสหน่วยเก็บข้อมูลอีกหนึ่งตัว 'typedef' ที่ใช้ในรูปแบบวากยสัมพันธ์ และไม่สำรองที่เก็บข้อมูล specifiers สั่งให้คอมไพเลอร์จัดเก็บตัวแปร คลาสการจัดเก็บข้อมูลภายนอกใน C บอกคอมไพเลอร์ว่าตัวแปรที่กำหนดถูกประกาศด้วยการเชื่อมโยงภายนอก

มีความแตกต่างที่สำคัญระหว่างการกำหนดและการประกาศตัวแปร การกำหนดตัวแปรคือการจัดสรรหน่วยความจำสำหรับตัวแปรและการประกาศหมายถึงการเริ่มต้นด้วยค่า
ไวยากรณ์:
storage_class_specifier data_type variable_name;
อ่าน: แนวคิดและหัวข้อโครงการที่น่าสนใจใน C # สำหรับผู้เริ่มต้น
กรณีพิเศษ: เมื่อไม่มีการประกาศหรือกำหนดตัวระบุคลาสหน่วยเก็บข้อมูลในโปรแกรม
มีการระบุคลาสการจัดเก็บอย่างน้อยหนึ่งรายการในการประกาศตัวแปร แต่ในกรณีที่ไม่ได้ระบุตัวระบุคลาสการจัดเก็บ ให้ปฏิบัติตามกฎต่อไปนี้:
1. ตัวแปรที่ประกาศภายในฟังก์ชันถือเป็นแบบอัตโนมัติ
2. ฟังก์ชันที่ประกาศภายในฟังก์ชันถือเป็นฟังก์ชันภายนอก
3. ตัวแปรและฟังก์ชันที่ประกาศนอกฟังก์ชันถือเป็นสแตติก โดยมี การเชื่อมโยง ภายนอก
ประเภทของคลาสการจัดเก็บใน C คืออะไร?
มีสี่ คลาสการจัดเก็บใน C มาดูกัน:
1. คลาสการจัดเก็บอัตโนมัติใน C
ทุกตัวแปรที่กำหนดไว้ในฟังก์ชันหรือบล็อกเป็นของคลาสการจัดเก็บอัตโนมัติโดยค่าเริ่มต้นหากไม่มีคลาสการจัดเก็บที่กล่าวถึง ตัวแปรของฟังก์ชันหรือบล็อกที่อยู่ในคลาสการจัดเก็บอัตโนมัติจะถูกประกาศด้วยตัวระบุอัตโนมัติ ตัวแปรภายใต้ auto ใน C จะอยู่ภายในบล็อกที่กำหนดและถูกละทิ้งภายนอกบล็อก

โปรแกรมง่าย ๆ ที่แสดงคลาสการจัดเก็บอัตโนมัติ:
#include <stdio.h>
int หลัก ( )
{
int อัตโนมัติ i = 11;
{
int อัตโนมัติ i = 22;
{
int อัตโนมัติ i = 33;
printf ( “%d “, ผม);
}
printf ( “%d “, ผม);
}
printf ( “%d”, ผม);
}
ผลลัพธ์ของโปรแกรม:
3 2 1
คำอธิบาย:
ในโปรแกรมข้างต้น มีการประกาศตัวแปร i สามครั้ง ตัวแปรที่มีชื่อเดียวกันสามารถกำหนดในบล็อกต่างๆ ได้ ดังนั้นโปรแกรมนี้จะคอมไพล์และรันได้สำเร็จโดยไม่มีข้อผิดพลาด ฟังก์ชัน 'printf' ในบล็อกชั้นในสุดจะพิมพ์ 3 และตัวแปร i ในบล็อกนี้จะถูกทำลายหลังจากบล็อกสิ้นสุด
อันถัดไป บล็อกด้านนอกที่สองพิมพ์ 2 จากนั้นบล็อกด้านนอกที่พิมพ์ 1 สำเร็จ ตัวแปรอัตโนมัติจะเริ่มต้นอย่างถูกต้อง มิฉะนั้นคุณจะได้รับค่าที่ไม่ได้กำหนดไว้เนื่องจากคอมไพเลอร์ไม่ได้ให้ค่าเริ่มต้น
2. ลงทะเบียนคลาสการจัดเก็บในC
ตัวแปรที่เป็นของ register storage class เทียบเท่ากับ auto ใน C แต่ถูกเก็บไว้ใน CPU register ไม่ใช่ในหน่วยความจำ จึงเป็นที่มาของชื่อ พวกเขาเป็นคนที่เข้าถึงบ่อย register specifier ใช้ในการประกาศตัวแปรของ register storage class ตัวแปรของคลาสพื้นที่จัดเก็บรีจิสเตอร์อยู่ในบล็อกซึ่งถูกกำหนดและถูกทำลายเมื่อบล็อกสิ้นสุด
โปรแกรมง่าย ๆ ที่แสดงคลาสการจัดเก็บข้อมูลการลงทะเบียน:
#include <stdio.h>
int หลัก ()
{
ลงทะเบียน int i = 10;
int *p = &i; //ข้อผิดพลาด: ที่อยู่ของตัวแปรการลงทะเบียนที่ร้องขอ
printf (“ค่าของ i: %d”, *p);
printf (“ที่อยู่ของ i: %u”, p);
}
คำอธิบาย:
ในโปรแกรมข้างต้น โค้ดจะพยายามรับที่อยู่ของตัวแปร i ลงในตัวแปรพอยน์เตอร์ p แต่เมื่อ i ถูกประกาศเป็นตัวแปรรีจิสเตอร์ รหัสจะไม่คอมไพล์และจะแสดงข้อผิดพลาด ” ข้อผิดพลาด: ที่อยู่ของตัวแปรรีจิสเตอร์ที่ร้องขอ” .
เฉพาะตัวแปรบางประเภทเท่านั้นที่วางลงในรีจิสเตอร์ ตัวแปร Register ไม่ได้รับค่าเริ่มต้นโดยคอมไพเลอร์
เรียนรู้: C ++ กับ Java: ความแตกต่างระหว่าง C ++ และ Java
3. คลาสการจัดเก็บแบบคงที่ในC
การมองเห็นตัวแปรสแตติกเป็นศูนย์นอกฟังก์ชันหรือไฟล์ แต่ค่าของตัวแปรจะยังคงอยู่ระหว่างการเรียก ตัวแปรที่มีคลาสการจัดเก็บแบบคงที่จะถูกประกาศด้วยตัวระบุแบบคงที่ ตัวแปรคงที่อยู่ภายในฟังก์ชันหรือไฟล์ ตัวระบุแบบคงที่ทำงานแตกต่างกันกับตัวแปรในเครื่องและตัวแปรส่วนกลาง
โปรแกรมอย่างง่ายที่แสดงคลาสการจัดเก็บแบบคงที่พร้อมตัวแปรภายในและทั่วโลก:
ฉัน. ตัวแปรท้องถิ่น
#include <stdio.h>
เป็นโมฆะ staticDemo()
{
int แบบคงที่ i;
{
คงที่ int i = 1;
printf (“%d “, ผม);
ผม++;
}
printf (“%d”, ผม);
ผม++;
}
int หลัก ()
{
staticDemo();
staticDemo();
}
ผลลัพธ์ของโปรแกรม:
1 0
2 1
คำอธิบาย:
เมื่อตัวแปรโลคัลถูกกำหนดโดยตัวระบุแบบคงที่ ภายในฟังก์ชันหรือบล็อก พื้นที่จัดเก็บถาวรจะถูกสร้างขึ้นในคอมไพเลอร์ ตัวแปรโลคัลแบบสแตติกสามารถมองเห็นได้ในฟังก์ชันหรือบล็อกที่มีการระบุและคงค่าไว้ระหว่างการเรียกใช้ฟังก์ชัน ในโปรแกรมข้างต้น ตัวแปรสแตติก i ถูกกำหนดไว้ที่สองตำแหน่งในสองช่วงตึกภายในฟังก์ชัน staticDemo() staticDemo() เรียกว่าสองในฟังก์ชันหลัก ในการเรียกครั้งถัดไป ตัวแปรสแตติกจะคงค่าเดิมไว้และไม่จำเป็นต้องเริ่มต้นใหม่อีก
ii ตัวแปรทั่วโลก
#include <stdio.h>
คงที่ int gInt = 1;
โมฆะคงที่ staticDemo()
{
int แบบคงที่ i;
printf (“%d “, ผม);
ผม++;
printf (“%d”, globalInt);
globalInt++;
}
int หลัก ()
{
staticDemo();
staticDemo();
}
ผลลัพธ์ของโปรแกรม:
0 1
1 2
คำอธิบาย:
ตัวแปรคงที่จำเป็นต้องเริ่มต้นเพียงครั้งเดียวในโปรแกรมและจะคงไว้ตลอดอายุการใช้งาน มีค่าเริ่มต้นเริ่มต้นเป็นศูนย์
เมื่อตัวแปรหรือฟังก์ชันส่วนกลางถูกกำหนดโดยตัวระบุแบบคงที่ ตัวแปรหรือฟังก์ชันนั้นจะรู้จักเฉพาะในไฟล์ที่กำหนดเท่านั้น สำหรับตัวแปรโกลบอล รูทีนไฟล์อื่นๆ ไม่สามารถเข้าถึงและแก้ไขเนื้อหาได้ เนื่องจากตัวแปรโกลบอลแบบสแตติกมี การเชื่อมโยงภายใน ในโปรแกรมข้างต้น ตัวแปรโกลบอลแบบคงที่ globalInt และฟังก์ชันสแตติก staticDemo() ถูกกำหนดให้เป็นสแตติกและไม่สามารถใช้ภายนอกไฟล์ C ได้
4. คลาสการจัดเก็บข้อมูลภายนอกใน C
ตัวแปรหรือฟังก์ชันของคลาสการจัดเก็บข้อมูลภายนอกได้รับการประกาศโดยตัวระบุ 'extern' เมื่อมีการประกาศตัวแปรด้วย extern specifier จะไม่มีการจัดสรรพื้นที่จัดเก็บให้กับตัวแปร และถือว่าถูกกำหนดไว้แล้วในที่อื่นในโปรแกรม ด้วยตัวระบุภายนอก ตัวแปรจะไม่ถูกเตรียมใช้งาน เหตุผลที่ใช้ extern เพื่อระบุตัวแปรในโปรแกรมเพื่อประกาศด้วย การเชื่อมโยงภายนอก
โปรแกรมอย่างง่ายที่แสดงคลาสการจัดเก็บข้อมูลภายนอก:
#include <stdio.h>
int ภายนอก i;
int หลัก ()
{
printf (“ผม: %d”, ผม);
}
int ผม = 1;
คำอธิบาย:

ในโปรแกรม C ด้านบน หากเอา extern int i ออก จะมีข้อผิดพลาด "Undeclared identifier 'i' เนื่องจากตัวแปร i ถูกกำหนดหลังจากใช้ใน printf ตัวระบุภายนอกสั่งคอมไพเลอร์ว่าตัวแปร i ถูกกำหนดและประกาศไว้ที่นี่
หากคุณเปลี่ยน extern int i; เพื่อ extern int i = 5; คุณจะได้รับข้อผิดพลาด "การนิยามใหม่ของ 'i'" เนื่องจากตัวระบุภายนอกไม่ได้เริ่มต้นตัวแปร
อ่านเพิ่มเติม: แนวคิดโครงการที่น่าตื่นเต้น 7 อันดับแรกใน C สำหรับผู้เริ่มต้น
คำพูดสุดท้าย
บทความนี้ให้รายละเอียดแนวคิดของ คลาสหน่วยเก็บข้อมูลใน C และบอกคุณว่าประเภทต่างจากกันอย่างไร เมื่อใดที่จะใช้คลาสหน่วยเก็บข้อมูลเฉพาะขึ้นอยู่กับการมอบหมายและขอบเขต อายุการใช้งาน และการมองเห็นของตัวแปรที่คุณกำลังเผชิญ
หากคุณสนใจที่จะเรียนรู้เพิ่มเติมและต้องการคำปรึกษาจากผู้เชี่ยวชาญในอุตสาหกรรม โปรดดูประกาศนียบัตร PG ของ Grad & IIIT Banglore ด้าน การพัฒนาซอฟต์แวร์แบบครบ วงจร