
- بواسطة x32x01 ||


أولاً: يعني إيه Declaration و Definition و Initialization؟
- Declaration (تصريح)
يعني بتقول للمترجم إن فيه متغير اسمه كذا، ونوعه كذا، من غير ما تديه قيمة.
int x;
- Definition (تعريف)
بتعلن عن المتغير وكمان بتحجزله مكان في الذاكرة. أوقات بيكونوا نفس الحاجة. - Initialization (تهيئة)
هنا بقى بتحجز مكان في الذاكرة وتديه قيمة أولية.
int x = 10;
تعالى ناخد Trick جميلة بالـ comma operator
في الطبيعي لما تعمل assign لقيمة في متغير، بتكون قيمة واحدة بس، زي كده: int x = 5;
بس تعالى نجرب حاجة غريبة شوية

مثال 1:
int x = 1, 2, 3;
هنا الناس كتير هتقول “Syntax Error”
وطبعًا معاهم حق

ليه؟ لأن المترجم هيشوف الكود كده:
Code:
int x = 1;
int 2, 3;

مثال 2:
Code:
int x;
x = 1, 2, 3;
تفتكر هيشتغل؟
الجواب: آه هيشتغل تمام

ليه؟
لأن المترجم هيقرا الكود كده:
Code:
int x;
x = 1;
2, 3;

مثال 3:
Code:
int x;
x = (1, 2, 3);

المترجم هينفذ كل القيم بالترتيب، بس النتيجة النهائية اللي هتتخزن في x هي آخر قيمة فقط

يعني
x = 3;
وده بسبب إن الأقواس بتخلي العملية تتنفذ بالكامل، لكن النتيجة النهائية بتكون آخر قيمة في الـ comma operator.
خلاصة الموضوع
المصطلح | المعنى | مثال |
---|---|---|
Declaration | تصريح عن وجود متغير | int x; |
Definition | تعريف المتغير وحجز مكانه في الذاكرة | int x; |
Initialization | تعريف المتغير وتعيين قيمة أولية له | int x = 5; |
Comma Operator Trick | بياخد آخر قيمة داخل الأقواس | x = (1,2,3); // x = 3 |
الخلاصة
- لو كتبت قيم مفصولة بفواصل من غير أقواس → أول قيمة بس هي اللي تتنفذ.
- لو استخدمت أقواس ( ) → آخر قيمة هي اللي تتخزن.
- دايمًا افهم الكود قبل ما تكتبه، عشان ما تقعش في "الخدع الصغيرة" دي
التعديل الأخير: