سلام:40:
کد:void main()
{
int *p,*w;
int a=45,b=7;
p=&a;
w=&b;
(*p)++;
w++;
(*w)=(*w)+1;
cout<<a<<b;
}
Printable View
سلام:40:
کد:void main()
{
int *p,*w;
int a=45,b=7;
p=&a;
w=&b;
(*p)++;
w++;
(*w)=(*w)+1;
cout<<a<<b;
}
موفق باشید.کد:
int _tmain(int argc, _TCHAR* argv[])
{
int*p,*w;
int a=45,b=7;
p=&a;
w=&b;
(*p)++;
//w++ is incorrect
//w++ use for array
(*w)++;
(*w)=(*w)+1;
cout<<a<<b;
}
سلام.
خطاي منطقي كجا بود ؟
اين دوتا متغيير هستن كه پشت هم فضا اشغال ميكنن، چون تويه حافظه جاي خالي متوالي وجود داره(البته هميشه اينطور نيست)، اين دوتا پشت سره هم فضا رو اشغال ميكنن. و وقتي شما
کد:p=&a;
w=&b;
(*p)++;
w++;
به اشاره گر w يكي اضافه ميكنيد، اين اشاره گر يه واحد (اينجا به اندازه int ) مياد جولو. پس حالا ديگه w و p به يك جا اشاره ميكنن. بعدش شما يكي به مقداري كه اين اشاره گر اشاره ميكنه اضافه ميكنيد ، پس a يكي اضافه ميشه و ...
w يك واحد مياد جولو درست اما از كجا معلوم كه P و W به يك جا اشاره مي كنند؟! P , W پشت سر هم هستن وقتي Wمياد به خونه بعد اشاره ميكنه خونه ي بعدي كه حتماً P نيست!!نقل قول:
-------------------------
چرا W++ خطا داره؟؟؟ خوب اگه به خونه بعدي بياد اشاره كنه چي ميشه؟
بله . منم عرض كردم :نقل قول:
بستگي به وضعيت حافظه داره.نقل قول:
يعني كامپايل نميشه ؟ ارور ميده ؟نقل قول:
چرا W++ خطا داره؟؟؟ خوب اگه به خونه بعدي بياد اشاره كنه چي ميشه؟
اگه اينطوره اين خط و اضافه كنيد ، ببينيد چي ميشه ؟ به جاش دقت كنيد كه كجا اضافه كردم:
کد:int a=45,b=7;
w= new int[3];
p=&a;
از این روش برای حرکت بین خونه های یک آرایه استفاده میشه.نقل قول:
چرا W++ خطا داره؟؟؟ خوب اگه به خونه بعدي بياد اشاره كنه چي ميشه؟
آرایه ها خونه های حافظه رو بصورت متوالی اشغال میکنند به همین دلیل میشه با داشتن آدرس خانه اول تا آخرین خانه پیمایش کرد.
زمانی که دو متغییر پشت سر هم اعلان میشوند هیچ تضمینی وجود نداره که این دو متغییر در حافظه پشت هم باشند.
زمانی که شما این عملو (++W) نسبت به یک متغییر انجام میدین ممکنه که اشاره گر به خونه ای از حافظه که اصلا هیچ مقداری نداره یا یک مقدار پوچ داره اشاره کنه.
اگر شما میخواهید به یک آدرس مشخص(اختیاری/انتخابی) از حافظه دسترسی پیدا کنید باید از یک روش دیگه استفاده کنید.