0Pricing
C Academy · درس

متغيرات const

اجعل القيم للقراءة فقط

متغيرات const درس مجاني في C Academy على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في C Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة C Academy 4 دروس في المجموع.

معنى const

تخبر الكلمة المفتاحية const المصرّف بأن قيمة المتغير يجب ألا تتغير بعد التهيئة.

إذا حاولتم تعديلها لاحقًا، يفشل التصريف. وهذا يحمي القيم التي يجب أن تبقى ثابتة.

const int MAX_USERS = 100;

التصريح عن const

يجب أن تمنحوا متغير const قيمته عند التصريح عنه، لأنكم لا تستطيعون إسناد قيمة إليه بعد ذلك.

تُهيّأ PI هنا مرة واحدة، وتُستخدم مثل أي متغير عادي عند القراءة.

#include <stdio.h>
int main(void) {
    const double PI = 3.14159;
    printf("%f\n", PI);
    return 0;
}

محاولة تغيير const

يؤدي الإسناد إلى const بعد التصريح عنه إلى خطأ في التصريف.

سيرفض المصرّف السطر أدناه، وهذه هي الحماية المطلوبة تمامًا.

const int LIMIT = 50;
/* LIMIT = 60; <- compile error */

const محدد النوع

بخلاف الماكرو الخام، يملك متغير const نوعًا حقيقيًا يتحقق منه المصرّف.

يوفر ذلك أمان الأنواع: يعرف المصرّف أن RATE من النوع double ويحذّر من إساءة استخدامه.

#include <stdio.h>
int main(void) {
    const double RATE = 0.05;
    double total = 200.0 * RATE;
    printf("%.2f\n", total);
    return 0;
}

const مع المؤشرات: البيانات

لثبات المؤشر نوعان. تعني const int *p أنه لا يمكن تغيير البيانات التي يشير إليها عبر p.

لا يزال بإمكانكم تغيير p ليشير إلى موضع آخر، لكن لا يمكنكم الكتابة من خلاله.

int x = 5;
const int *p = &x;
/* *p = 9; <- error: data is const */

const مع المؤشرات: المؤشر

تعني int *const p أنه لا يمكن إعادة إسناد المؤشر نفسه، لكن يمكن تغيير البيانات.

اقرؤوا التصريحات من اليمين إلى اليسار: "p مؤشر const إلى int".

int x = 5, y = 8;
int *const p = &x;
*p = 9;       /* allowed */
/* p = &y;    <- error: pointer is const */

حماية معلمات الدوال

إن وسم معلمة المؤشر باستخدام const يعني أن الدالة لن تعدّل بيانات المستدعي.

يوثّق ذلك القصد، ويتيح للمصرّف اكتشاف عمليات الكتابة غير المقصودة.

#include <stdio.h>
void show(const char *msg) {
    printf("%s\n", msg);
}
int main(void) {
    show("hello");
    return 0;
}

استخدام const في عملية حسابية

من الاستخدامات الشائعة القيم الثابتة للإعدادات، مثل معدل الضريبة أو معامل التحويل.

تحافظ قراءة الثابت على وضوح الصيغة وعلى وجود القيمة في مكان واحد.

#include <stdio.h>
int main(void) {
    const double KM_PER_MILE = 1.609;
    double miles = 10.0;
    printf("%.2f km\n", miles * KM_PER_MILE);
    return 0;
}

للثابت const موقع في الذاكرة

بما أن const متغير فعلي، فإنه يشغل حيزًا في الذاكرة، ويمكنك الحصول على عنوانه.

يختلف ذلك عن ماكرو #define، الذي ليس سوى استبدال نصي بحت ولا يملك عنوانًا.

#include <stdio.h>
int main(void) {
    const int N = 42;
    const int *p = &N;
    printf("%d\n", *p);
    return 0;
}

النطاق ومدة الحياة

يتبع const قواعد النطاق نفسها التي تتبعها المتغيرات العادية.

إذا عُرّف داخل دالة، يكون محليًا؛ وإذا عُرّف خارجها، يكون عامًا. ويمثّل هذا النطاق ميزة أخرى مقارنة بالماكروهات على مستوى الملف.

#include <stdio.h>
const int GLOBAL_MAX = 1000;
int main(void) {
    const int local_min = 1;
    printf("%d %d\n", local_min, GLOBAL_MAX);
    return 0;
}

const والأرقام السحرية

يؤدي استبدال الأرقام المباشرة في الشيفرة بقيم const مسماة إلى إزالة «الأرقام السحرية».

إذا تغيرت القيمة يومًا ما، فستعدّل سطرًا واحدًا بدلًا من البحث عنها في البرنامج بأكمله.

#include <stdio.h>
int main(void) {
    const int SECONDS_PER_MIN = 60;
    int minutes = 5;
    printf("%d seconds\n", minutes * SECONDS_PER_MIN);
    return 0;
}

تحقق سريع

تحقق من مدى استيعابك لسلوك const.

مراجعة

متغير const هو قيمة ذات نوع، للقراءة فقط، يحميها المصرّف من التغيير.

له نوع ونطاق وعنوان، بخلاف الماكرو. ومع المؤشرات، يمكن أن ينطبق const على البيانات أو المؤشر أو كليهما. سنقارن ذلك لاحقًا مع #define.

الأسئلة الشائعة

هل درس «متغيرات const» مجاني؟

نعم — نص درس «متغيرات const» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة C Academy، انتقل إلى CoddyKit PRO. تتضمن دورة C Academy 4 دروس في المجموع.

ماذا ستتعلم في «متغيرات const»؟

اجعل القيم للقراءة فقط تتمرن على C Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ C Academy؟

لا تُشترط خبرة سابقة. C Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.

كم من الوقت يستغرق درس «متغيرات const»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس C Academy هذا؟

نعم. كل درس في C Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. تعريف Enums
  2. قيم Enum والنطاقات
  3. متغيرات const
  4. ثوابت #define
← العودة إلى C Academy