السلام عليكم ورحمة الله
مرحبا بكم في أخترنا لك(4)
أخترنا لك(4): الفرق بين تأثير المؤثرات قبل وبعد المتغيرات
++n; وتسمي prefix وقد تظهر بعد المتغير مثل n++; وتسمي postfix .
لعلك تعرف ان المؤثر السابق للمتغير prefix يقوم اولا بتغيير قيمة المتغير قبل ان تستخدم قيمة الحالية فى اي شئ آخر. مثال:
int n=0, m=0; //اولا زيادة المتغير m بمقدار 1 ثم تعيين قيمته الى المتغير n n = ++m; // يعرض النتيجة 1 1 cout << n << m;
في هذا المثال فأن n تساوي 1 بعد عملية تعيين القيمة لها لاحظ ان علمية الزيادة تمت اولا على المتغير m قبل تعيين القيمة الى n. والعكس يتم هنا لاحظ المثال التالي:
int n=0, m=0; // اولا تعيين قيم m الى n ثم زيادة m. n = m++; // النتيجة 0 1 cout << n << m;
فى المثال السابق فأن n تساوي صفر بعد علمية التعيين لان علمية الزيادة تمت بعد تعيين قيمة m الى n.
لكي تفهم الفرق بين الموثرات السابقة على المتغير واللاحقة للمتغير بشكل افضل. تعال نري الكود الاسلمبي الناتج من عملية فك الكود السابق. لو لم تلاحظ بشكل فوري الفرق بين الاثنين بكل بساطة لاحظ اين يظهر موجة الزيادة والنقصان فى لغة الاسمبلى داخل الكود :
/*كود الاسملبي لكود سي : m=n++;*/
// تخزين قيمة n داخل المسجل ecx mov ecx, [ebp-0x04] // تعيين القيمة الموجودة فى المسجل ecx الى mov [ebp-0x08], ecx //زيادة قيمة n inc dword ptr [ebp-0x04]
//كود الاسمبلى المكافئ لــ: m=++n;
inc dword ptr [ebp-0x04] /*زيادة n*/ // تخزين قيمة n فى المسجل eax mov eax, [ebp-0x04] // تعيين القيمة التى فى المسجل exc الى m mov [ebp-0x08], eax
انت تعرف ان المؤثرات مثل -- و ++ يمكن ان تظهر قبل المتغير مثل

