ميخواستم بدونم متغير static چطوری تغيير ميکنه؟
تو اين 2 تا مثال هم توضيح بديد که چجوری s,y تغيير ميکنن ممنون ميشم
کد:
main()
{
int m;
int n;
f(2,4);
f(3,5);
}
f(int a,int b)
{
static int s=0;
int x;
int y;
x=0;
x++;
s++;
}
کد:
main()
{
f();
}
f()
{
int x=0;
static int y=0;
x++;
y++;
}
نقل قول: ميخواستم بدونم متغير static چطوری تغيير ميکنه؟
اول از همه که باید بگم دو نوع تغیر استاتیک داریم: محلی و عمومی
محلی:
1: فقط داخل همون تابعی که تعریف میشن قابل استفاده هستند
2: وقتی تابع را فراخوانی میکنی ایجاد میشن و وقتی از تابع خارج شدی، اخرین مقدار خودش را حفظ میکنه
3: فقط و فقط یک بار مقدار اولیه میگیره.
عمومی:
1:در خارج از توابع تعریف میشن ودر توابعی ه بعد از اونا تعریف میشن قابلیت استفاده دارن
2: بعد از هر بار استفاده ازش،اخرین مقدار خودش را حفظ میکنه
3: فقط و فقط یک بار مقدار اولیه میگیره.
نقل قول: تو اين 2 تا مثال هم توضيح بديد که چجوری s,y تغيير ميکنن ممنون ميشم
با این تعاریفی که برات گفتم به راحتی خودت میتونی بفهمی که چه جوری تغییر میکنن.
(۲۷-خرداد-۱۳۸۸, ۱۸:۲۴:۵۱)mahdi20 نوشته است: [ -> ]نقل قول: ميخواستم بدونم متغير static چطوری تغيير ميکنه؟
اول از همه که باید بگم دو نوع تغیر استاتیک داریم: محلی و عمومی
محلی:
1: فقط داخل همون تابعی که تعریف میشن قابل استفاده هستند
2: وقتی تابع را فراخوانی میکنی ایجاد میشن و وقتی از تابع خارج شدی، اخرین مقدار خودش را حفظ میکنه
3: فقط و فقط یک بار مقدار اولیه میگیره.
عمومی:
1:در خارج از توابع تعریف میشن ودر توابعی ه بعد از اونا تعریف میشن قابلیت استفاده دارن
2: بعد از هر بار استفاده ازش،اخرین مقدار خودش را حفظ میکنه
3: فقط و فقط یک بار مقدار اولیه میگیره.
نقل قول: تو اين 2 تا مثال هم توضيح بديد که چجوری s,y تغيير ميکنن ممنون ميشم
با این تعاریفی که برات گفتم به راحتی خودت میتونی بفهمی که چه جوری تغییر میکنن.
يعنی تو اين 2 تا مثال s,y هر 2 همون مقدار صفر ميمونن و تغيير نميکنن ولی بقيه متقيرها يکی يکی اضافه ميشن؟
نقل قول: يعنی تو اين 2 تا مثال s,y هر 2 همون مقدار صفر ميمونن و تغيير نميکنن ولی بقيه متقيرها يکی يکی اضافه ميشن؟
ببین تو اولی موقعی که برای بار اول تابع اف با ورودی های 2و4 فراخونی میشه ، در اول کار s=0. بعد در ادامه اجرای تابع یکی بهش اضافه میشه. خوب تا الن s=1 .حالا از تابع میاد بیرون و به برنامه ی main برمیگرده. دوباره تابع اف با ورودی های 3و5 فراخونی میشه. در اینجا میخواد مقداره اس را برابر 0 بزاره، ولی همین طور که گفتم متغير static فقط و فقط یک بار مقدار اولیه میگیره و اخرین مقدار خودش را حفظ میکنه پس 0 در اس ذخیره نمیشه و همون مقدار 1 که داشت باقی میمونه و همچنان در ادامه ی تابع یکی بهش اضافه میشه. پس در نهایت s=2
در مورد دومی هم باید بگم، اون هم همینطوری تحلیل میشه و در نهایت y=1
راهنمایی :هر وقت خواستی بدونی تحلیله یه برنامه چجوری میشه، اون برنامه را به صورت خط به خط اجرا کن.
(۲۷-خرداد-۱۳۸۸, ۲۳:۰۲:۵۳)mahdi20 نوشته است: [ -> ]نقل قول: يعنی تو اين 2 تا مثال s,y هر 2 همون مقدار صفر ميمونن و تغيير نميکنن ولی بقيه متقيرها يکی يکی اضافه ميشن؟
ببین تو اولی موقعی که برای بار اول تابع اف با ورودی های 2و4 فراخونی میشه ، در اول کار s=0. بعد در ادامه اجرای تابع یکی بهش اضافه میشه. خوب تا الن s=1 .حالا از تابع میاد بیرون و به برنامه ی main برمیگرده. دوباره تابع اف با ورودی های 3و5 فراخونی میشه. در اینجا میخواد مقداره اس را برابر 0 بزاره، ولی همین طور که گفتم متغير static فقط و فقط یک بار مقدار اولیه میگیره و اخرین مقدار خودش را حفظ میکنه پس 0 در اس ذخیره نمیشه و همون مقدار 1 که داشت باقی میمونه و همچنان در ادامه ی تابع یکی بهش اضافه میشه. پس در نهایت s=2
در مورد دومی هم باید بگم، اون هم همینطوری تحلیل میشه و در نهایت y=1
راهنمایی :هر وقت خواستی بدونی تحلیله یه برنامه چجوری میشه، اون برنامه را به صورت خط به خط اجرا کن.
در مورد x,y در اولی و x در دومی هم توضيح ميديد که چجوری تغيير ميکنن؟
بيشتر ميخوام بدونم متغير های static و غير static همزمان چطوری تغيير ميکنن
نقل قول: در مورد x,y در اولی و x در دومی هم توضيح ميديد که چجوری تغيير ميکنن؟
بيشتر ميخوام بدونم متغير های static و غير static همزمان چطوری تغيير ميکنن
در مورد x در اولی باید عرض کنم که این متغیر به صورته محلی در تابع ایجاد شده و فقط در تابع قابل استفاده هستش و در اینجا ، در ابتدا مقدار 0 دارد و سپس یکی به ان اضافه میشه.
ولی در مورد y این متغیر به صورته محلی در تابع ایجاد شده و هیچ مقداری هم نگرفته و در مورد اون ، برنامه بهت warning میده.
x در دومی همان وضعیت x در دومی را داره
(۲۸-خرداد-۱۳۸۸, ۰۳:۵۲:۰۳)mahdi20 نوشته است: [ -> ]نقل قول: در مورد x,y در اولی و x در دومی هم توضيح ميديد که چجوری تغيير ميکنن؟
بيشتر ميخوام بدونم متغير های static و غير static همزمان چطوری تغيير ميکنن
در مورد x در اولی باید عرض کنم که این متغیر به صورته محلی در تابع ایجاد شده و فقط در تابع قابل استفاده هستش و در اینجا ، در ابتدا مقدار 0 دارد و سپس یکی به ان اضافه میشه.
ولی در مورد y این متغیر به صورته محلی در تابع ایجاد شده و هیچ مقداری هم نگرفته و در مورد اون ، برنامه بهت warning میده.
x در دومی همان وضعیت x در دومی را داره
پس يعنی x در اولی وقتی بار اول فراخوانی ميشه يکی بهش اضافه ميشه و از صفر ميشه يک و بار دوم هم که فراخوانی ميشه بازم صفر ميشه و يکی بهش اضافه ميشه و ميشه يک؟
ایول!!!!!!!!!!!!
دقیقا!!!!!!!
خوده خودشه!!!!!!!!!!!!!!!!
اینکه نوشتید متغیرهای استاتیک فقط یک بار مقدار می گیرند من تست کردم اشتباهه هرباری یه مقدار جدید در یافت می کنند!!!