كود سي بلس بلس

السلام عليكم لدي كود وظيفته حساب كم مرة تم استدعاء الدالة

طبعا بدون استخدام الstatic او global variables... اربد شرح كيف يعمل الكود

جزاكم الله خيرا

include

using namespace std;

void count() {

int a;
a++;
cout << a << " time" << endl;

};

int main() { int i; for(i=1;i<=10;++i){
count(); } return 0;

}

يرجى الدخول لحسابك أو تسجيل حساب لتستطيع إضافة تعليق
حساب جديد دخول

التعليقات

waelaljamal أضف ردا

يتم حجز نفس العنوان في الذاكرة لكل استدعاء للدالة count بدون حذف القيمة السابقة من الذاكرة أو تصفيرها (وضع 0 كقيمة لها).

لذلك كل استدعاء لـ count وبعد تعريف المتغير a سوف يأخذ نفس العنوان السابق و يأخذ نفس القيمة لأنها لم تتغير فعند قراءة قيمة للمتغير a سوف نقرأ القيمة التي نتجت عن آخر تعديل وعند تطبيق أي علاقة رياضية أو تتعدل تلك القيمة السابقة في الذاكرة و يعمل البرنامج بها.

إن تعريف قيمة a ب 0 في بداية الدالة سوف تؤدي لعرض القيمة 1 دوما، وأي تغيير بقيمتها سوف يتم حفظه للاستدعاء التالي.

طبعا هذه الطريقة غير عملية و ليست سليمة، يفضل عمل متغير عام global أو static .

طريقة ثالثة: تمرير العداد بعد تعريفه في main بالعنوان:

#include <iostream>
using namespace std;
void count(int &a)
{
    a++;
    cout << a << " time" << endl;
}
int main()
{
    int i, a = 0;
    for(i=1; i<=10; ++i)
    {
        count(a);
    }
    return 0;
}

   I am Having a same issue last time. I am looking for more information about it. I will follow you to update the latest posts. https://www.myccpay.life