فئات التخزين في C: أنواع مختلفة من فئات التخزين [مع أمثلة]

نشرت: 2020-10-21

يتركز الترميز باستخدام لغة C بشكل كبير على استخدام المتغيرات في كل برنامج. هذه هي الجوانب الرئيسية لبرمجة لغة سي. كل متغير في C له خاصيتان ؛ فئات النوع والتخزين. من بينها ، يشير النوع إلى نوع بيانات المتغير ، وتحدد فئات التخزين في C نطاق المتغير وعمره ورؤيته. تُستخدم فئات التخزين في C للعثور على العمر ، والرؤية ، وموقع الذاكرة ، والقيمة الأولية للمتغير.

في منشور المدونة هذا ، سنلقي نظرة تفصيلية على فئات التخزين في لغة C وأنواعها وكيف تؤثر خصائصها على إخراج البرنامج مع بعض أمثلة البرمجة. يتم استخدام فئة التخزين في C لتمثيل معلومات المتغير.

تعلم كيفية إنشاء تطبيقات مثل Swiggy و Quora و IMDB والمزيد

جدول المحتويات

ما هي فئات التخزين في C؟

تخصص فئات التخزين في C مساحة التخزين للمتغير الذي سيتم الاحتفاظ به في الذاكرة. يتم تخزينها في ذاكرة الوصول العشوائي للنظام. بصرف النظر عن مساحة التخزين ، فإنها تحدد نطاق المتغير. يتم تخزين المتغيرات في برنامج C في مكان مادي في الذاكرة العشوائية ، والتي هي أساسًا ذاكرة الجهاز وسجلات وحدة المعالجة المركزية.

تحدد فئات التخزين في C أيضًا عمر المتغير وتسميه "محلي" أو "عالمي". تعتبر فئات التخزين مفيدة أيضًا في تحديد النطاق أو الرؤية والقيمة الأولية للمتغير. توجد في المقام الأول أربع فئات تخزين في C ، بمعنى. آلي ، تسجيل ، ثابت ، وخارجي . سنناقش كل واحد على حدة.

كيف يتم الإعلان عن فئات التخزين في C؟

يتم الإعلان عن فئات التخزين الأربعة في C في كتلة أو برنامج مع محددات فئة التخزين ، تلقائي ، تسجيل ، خارجي ، ثابت. يوجد محدد فئة تخزين آخر ، "محرف" مستخدم في الشكل النحوي ، ولا يحتفظ بالتخزين. المحددات ترشد المترجم إلى تخزين المتغيرات. تخبر فئة التخزين الخارجي في C المترجم أن المتغير المعرّف يتم التصريح عنه بوصلة خارجية.

هناك فرق رئيسي بين تعريف المتغير والإعلان عنه. تحديد متغير هو عبارة عن تخصيص ذاكرة للمتغير وإعلانه يعني تهيئته بقيمة.

بناء الجملة:

Storage_class_specifier data_type متغير_اسم ؛

قراءة: أفكار مشاريع مثيرة للاهتمام وموضوعات في C # للمبتدئين

حالة خاصة: عندما لا يتم التصريح عن محدد فئة التخزين أو تعريفه في البرنامج

يوجد محدد فئة تخزين واحد على الأقل في إعلان المتغير. ولكن في حالة عدم تحديد محدد فئة التخزين ، يتم اتباع القواعد التالية:

1. المتغيرات المعلنة داخل دالة تعتبر تلقائية.

2. الوظائف المعلنة داخل وظيفة تعتبر خارجية.

3. تعتبر المتغيرات والوظائف المعلنة خارج دالة ثابتة ، مع ارتباط خارجي .

ما هي أنواع فئات التخزين في سي؟

هناك أربع فئات تخزين في C ، فلنلقِ نظرة عليها:

1. فئات التخزين التلقائي في C

ينتمي كل متغير محدد في دالة أو كتلة إلى فئة التخزين التلقائي افتراضيًا إذا لم يكن هناك فئة تخزين مذكورة. يتم التصريح عن متغيرات دالة أو كتلة تنتمي إلى فئة التخزين التلقائي بواسطة المحدد التلقائي. تكون المتغيرات الموجودة ضمن " تلقائي" في C محلية بالنسبة للكتلة حيث يتم تعريفها ويتم التخلص منها خارج الكتلة.

برنامج بسيط يعرض فئات التخزين التلقائي:

# تضمين <stdio.h>

انت مين( )

{

كثافة العمليات أنا = 11 ؛

{

كثافة العمليات أنا = 22 ؛

{

كثافة العمليات أنا = 33 ؛

printf ("٪ d"، i) ؛

}

printf ("٪ d"، i) ؛

}

printf ("٪ d"، i) ؛

}

مخرجات البرنامج:

3 2 1

تفسير:

في البرنامج أعلاه ، هناك ثلاثة أضعاف المتغير المعلن عنه. يمكن تعريف المتغيرات التي تحمل الاسم نفسه في كتل مختلفة. وبالتالي ، سيقوم هذا البرنامج بترجمة وتنفيذ بنجاح دون أي خطأ. ستطبع الوظيفة "printf" في الكتلة الداخلية 3 وسيتم تدمير المتغير i في هذه الكتلة بعد انتهاء الكتلة.

الكتلة التالية ، الكتلة الخارجية الثانية تطبع 2 والتي تليها الكتلة الخارجية التي تطبع 1. يتم تهيئة المتغيرات التلقائية بشكل صحيح ؛ وإلا ستحصل على قيم غير محددة لأن المترجم لا يعطيها قيمة أولية.

2. تسجيل فئات التخزين في C

المتغيرات التي تنتمي إلى فئة تخزين السجل مكافئة لـ auto في C ولكن يتم تخزينها في سجلات وحدة المعالجة المركزية وليس في الذاكرة ، ومن هنا جاء الاسم. هم الذين يتم الوصول إليهم بشكل متكرر. محدد السجل يستخدم للإعلان عن متغير فئة تخزين السجل. تكون متغيرات فئة تخزين السجل محلية بالنسبة للكتلة حيث يتم تعريفها وتدميرها عند انتهاء الكتلة.

برنامج بسيط يعرض تسجيل فئات التخزين:

# تضمين <stdio.h>

انت مين()

{

سجل int i = 10 ؛

int * p = & i ؛ // خطأ: طلب عنوان متغير التسجيل

printf ("قيمة i:٪ d" ، * p) ؛

printf ("عنوان i:٪ u" ، p) ؛

}

تفسير:

في البرنامج أعلاه ، يحاول الكود الحصول على عنوان المتغير i في متغير المؤشر p ولكن نظرًا لأنه تم الإعلان عن i كمتغير تسجيل ، فلن يتم تجميع الكود وسيعرض الخطأ "خطأ: طلب عنوان متغير التسجيل" .

يتم وضع أنواع معينة فقط من المتغيرات في السجلات. لا يتم إعطاء متغيرات التسجيل قيمة أولية من قبل المترجم.

تعلم: C ++ مقابل Java: الفرق بين C ++ و Java

3. فئات التخزين الثابتة في C.

تكون رؤية المتغيرات الثابتة صفراً خارج وظيفتها أو ملفها ، ولكن يتم الاحتفاظ بقيمها بين المكالمات. يتم التصريح عن المتغيرات ذات فئة التخزين الثابت بالمحدد الثابت. المتغيرات الثابتة داخل دالة أو ملف. يعمل المحدد الثابت بشكل مختلف مع المتغيرات المحلية والعالمية.

برامج بسيطة تعرض فئات التخزين الثابتة ذات المتغيرات المحلية والعالمية:

أنا. متغير محلي

# تضمين <stdio.h>

باطل staticDemo ()

{

ثابت الباحث أنا ؛

{

ثابت int i = 1 ؛

printf ("٪ d"، i) ؛

أنا ++ ؛

}

printf ("٪ d"، i) ؛

أنا ++ ؛

}

انت مين()

{

staticDemo () ،

staticDemo () ،

}

مخرجات البرنامج:

1 0

2 1

تفسير:

عندما يتم تحديد متغير محلي بواسطة محدد ثابت ، داخل دالة أو كتلة ، يتم إنشاء مساحة تخزين دائمة في المترجم. يكون المتغير المحلي الثابت مرئيًا للوظيفة أو الكتلة حيث يتم تحديده ويحتفظ بقيمته بين استدعاءات الوظيفة. في البرنامج أعلاه ، يتم تعريف المتغير الثابت i في مكانين في كتلتين داخل دالة staticDemo (). يسمى staticDemo () رقم اثنين في الوظيفة الرئيسية. في الاستدعاء التالي ، تحتفظ المتغيرات الثابتة بقيمها القديمة ولا يلزم إعادة تهيئتها مرة أخرى.

ثانيا. المتغير العالمي

# تضمين <stdio.h>

ثابت int gInt = 1 ؛

ثابت الفراغ staticDemo ()

{

ثابت الباحث أنا ؛

printf ("٪ d"، i) ؛

أنا ++ ؛

printf ("٪ d" ، globalInt) ؛

globalInt ++ ؛

}

انت مين()

{

staticDemo () ،

staticDemo () ،

}

مخرجات البرنامج:

0 1

1 2

تفسير:

تحتاج المتغيرات الثابتة إلى التهيئة مرة واحدة فقط في البرنامج ويتم الاحتفاظ بها طوال العمر. لديهم القيمة الأولية الافتراضية من الصفر.

عندما يتم تحديد متغير عام أو وظيفة بواسطة محدد ثابت ، فإن هذا المتغير أو الوظيفة يكون معروفًا فقط للملف الذي تم تعريفه فيه. بالنسبة للمتغير الشامل ، لا يمكن لإجراءات الملفات الأخرى الوصول إلى محتوياته وتغييرها كمتغير عام ثابت له ارتباط داخلي. في البرنامج أعلاه ، يتم تعريف المتغير العالمي الثابت globalInt والدالة الثابتة staticDemo () على أنهما ثابتان ولا يمكن استخدامهما خارج ملف C.

4. فئات التخزين الخارجية في C

يتم التصريح عن متغيرات أو وظائف فئة التخزين الخارجي بواسطة محدد "خارجي". عندما يتم التصريح عن متغير بمحدد خارجي ، لا يتم تخصيص أي تخزين للمتغير ويفترض أنه تم تعريفه بالفعل في مكان آخر في البرنامج. باستخدام محدد خارجي ، لا تتم تهيئة المتغير. سبب استخدام extern لتحديد متغير في برنامج للإعلان عنه مع ارتباط خارجي.

برنامج بسيط يعرض فئات التخزين الخارجية:

# تضمين <stdio.h>

الباحث الخارجي أنا ؛

انت مين()

{

printf ("i:٪ d"، i) ؛

}

int أنا = 1 ؛

تفسير:

في برنامج C أعلاه ، إذا تمت إزالة extern int i ، فسيكون هناك خطأ "معرف غير معروف" i " لأن المتغير i تم تعريفه بعد استخدامه في printf. المحدد الخارجي يوجه المترجم إلى أن المتغير i قد تم تعريفه وتم الإعلان عنه هنا.

إذا قمت بتغيير خارجي int i ؛ للخارج int i = 5 ؛ سوف تحصل على خطأ "إعادة تعريف" i " لأن المحدد الخارجي لا يقوم بتهيئة متغير.

اقرأ أيضًا: أهم 7 أفكار مشاريع مثيرة في C للمبتدئين

الكلمات الأخيرة

توضح هذه المقالة بالتفصيل مفهوم فئات التخزين في C وتخبرك كيف تختلف أنواعها عن بعضها البعض. يعتمد وقت استخدام فئة تخزين معينة على التعيين والنطاق والعمر ورؤية المتغير الذي تتعامل معه.

إذا كنت مهتمًا بمعرفة المزيد وتحتاج إلى إرشاد من خبراء الصناعة ، فراجع دبلوم upGrad & IIIT Banglore PG في تطوير برامج Full-Stack .

استعد لمهنة المستقبل

برنامج UPGRAD و IIIT-BANGALORE دبلوم PG في تطوير برامج المكدس الكامل
سجل اليوم