ورود

View Full Version : سوال: حوزه کلاس static



sourcecode
چهارشنبه 30 دی 1394, 17:52 عصر
سلام
مشکل من روی static هست چرا وقتی تابع را به صورت void test(static int size) مینویسم(شماره 1) پس از هر بار اجرا خروجی تابع ثابت هست یعنی 2 و 2 و 2 ... ولی در صورتی که تابع بدون آرگومان شود و static int size را درون تابع بنویسیم(شماره 2) با هر بار اجرا یک واحد به آن افزوده میشود یعنی 2 و 3 و 4 ... مشکل من اینه که چه فرقی میکنه که جوابها فرق داره ؟ محدوده static محلی هست و درون یک تابع هست پس چرا جواب ها با هم فرق دارد؟؟؟



*********************1**********************
void test(static int size)
{
size++;
cout « size « endl;
}
int _tmain(int argc, _TCHAR* argv[])
{
test(1);
test(1);
test(1);
cout « endl;
system("pause");
return 0;
}




**********************2*********************
void test()
{
static int size;
size++;
cout « size « endl;
}
int _tmain(int argc, _TCHAR* argv[])
{
test();
test();
test();
cout « endl;
system("pause");
return 0;
}

ravaei
پنج شنبه 01 بهمن 1394, 07:44 صبح
شما تو حالت اول دارید بهش هی مقدار یک رو پاس میدید و مثلما size = 1 خواهد شد تا اون جایی که من اطلاع دارم استاتیک بودن یک متغییر دلیل بر مقدار نگرفتن اون متغیر نمیشه و تا زمانی که شما بهش مقدار جدید ندادید حتی با اتمام تابع نابود نمیشه و با دوباره فراخونی کردن تابع فضای جدیدی تو حافظه اشغال نمیکنه بخاطر همین می تونیم به مقدار قبلیش دسترسی داشته باشیم ... مثال دوم هم مثل مثال 1 هستش با این تفاوت که شما با هربار فراخونی مقدار جدید بهش نمیدید و مقدار قبلیه خودش رو هرسری 1 واحد بیشتر می کنه .