PDA

View Full Version : سوال: سوال راجع به اشاره گر و عملگر &



storm_saeed
شنبه 16 شهریور 1392, 20:01 عصر
سلام دوستان
اگه میشه راجع به اشاره گر و عملگر & تفاوت هاشون؟ محدودیت هاشون؟ وکجاها استفاده میشن ؟ وکجا ها اگه به جای هم استفاده شن موجب خطای منطقی میشه؟توضیح بدید.
ممنون
(کلیاتشو و نحوه ی استفاده شو بلدم فقط میخوام باز دوباره یکی کامل توضیح بده مچکر)

omidshaman
شنبه 16 شهریور 1392, 21:00 عصر
عملگر & ۳ تا چیز مختلف تو C++‎‎‎‎‎‎‎‎‎‎‎‎ رو شامل میشه
1ـ‌عملگر بیتی
2ـ تعریف آبجکت از نوع ادرس
3ـ گرفتن ادرس
اولیش که یک عملگر بیتی سادست مثلا این

8&11-->1011 & 1000 -->1000-->8;

دومی هم برای گرفتن ادرس ابجکت استفاده میشه
مثلا

int x=12;
int *y=&x;
(*y)++;
//x=13 y=13

سومی هم که معنیش این میشه که چیزی که تعریف کردیم یک نوع ادرسه از نوع اون آبجکت خاص
مثلا

int x=12;
int& y=x; // y-->ادرس از نوع اینت
y++
//mesle balayee x=13 y=13
یا برای فرستادن متغیر با رفرنس به فانکشن

void func(int& a);
محدودیت هم تنها چیزی که الان به ذهنم میرسه اینه که & نوع سوم رو فقط میشه روی ابجکت از نوع lvalue (http://stackoverflow.com/questions/3601602/what-are-rvalues-lvalues-xvalues-glvalues-and-prvalues) استفاده کرد.
خطای منطقی هم نفهمیدم منظورت چیه من که جایی ندیدم کسی اشتباها اینارو به جای هم استفاده کنه چون اصلا نمیشه Syntax error میده کامپایلر .

storm_saeed
شنبه 16 شهریور 1392, 22:11 عصر
فقط من نمیفهمم چرا x هم 13 میشه؟
فرق & با * چیه ؟
مثلا y=&x میگیم y رو برابر آدرسی که x داره قرار بده؟ پس به زبان اشاره گریش چی میشه (منظروم اینه همین رو با استفاده از اشاره گر بخوایم بگیم)؟
ممنون

1485159
شنبه 16 شهریور 1392, 22:18 عصر
تا جایی که من اطلاع دارم آدرس هم مثل همون اشاره گره (کاربردش) ولی دیگه لازم نیس از & و * برای مقدار دهی و آدرس دهی استفاده کنی. یعنی استفادش راحتتره. درضمن انگار تو سی از آدرس نمیشه استفاده کرد.


فرق & با * چیه ؟
& برای بدست آوردن آدرسه متغیر تو حافظه هست
* برای بدست آوردن مقدار اشاره گر


مثلا y=&x میگیم y رو برابر آدرسی که x داره قرار بده؟ پس به زبان اشاره گریش چی میشه (منظروم اینه همین رو با استفاده از اشاره گر بخوایم بگیم)؟
اینجا y اشاره گره دیگه.

storm_saeed
شنبه 16 شهریور 1392, 22:42 عصر
فرق & و * چیه؟
تا اونجایی که میدونم مثلا & فقط به ادرس ارجاع میده و امکان دستکاری تو متغیر جدیدی که تعریف کردیم نمیتونیم بدیم ولی با اشاره گر میشه.درسته؟

1485159
شنبه 16 شهریور 1392, 22:47 عصر
فرق & و * چیه؟
تو پست قبل تفاوتشون رو تو اشاره گر گفتم ولی انگار منظورتون تفاوت آدرس و اشاره گر بوده که اونم گفتم.

omidshaman
شنبه 16 شهریور 1392, 22:48 عصر
فرق & با * چیه ؟
مثلا y=&x میگیم y رو برابر آدرسی که x داره قرار بده؟ پس به زبان اشاره گریش چی میشه (منظروم اینه همین رو با استفاده از اشاره گر بخوایم بگیم)؟
ممنون
این جا رو بخون کامل نوشته
http://stackoverflow.com/questions/57483/what-are-the-differences-between-pointer-variable-and-reference-variable-in-c
اگر چیزی نفهمیدی همین جا بپرس

storm_saeed
یک شنبه 17 شهریور 1392, 09:09 صبح
فقط اگه میشه بگید بالا چرا هم x و هم y سیزده شدند
ممنون

omidshaman
یک شنبه 17 شهریور 1392, 14:03 عصر
برای این که شما داری ادرس x رو میریزی داخل y

int x=12;
int *y=&x;

یعنی الان تو کد بالا y مقداری که داخلش هست یک نوع ادرسه اگر این کدو اجرا کنی متوجه منظورم میشی

int x=12;
int *y=&x;
cout<<y;
//khorooji 0x2ffce masalan

بعد همون جوری که 1485159 گفتن * برای دسترسی ه مقدار درون ادرس به کار میره
یعنی الان اگر اینو احرا کنی

cout<<*y;
بهت 12 میده
حالا اگر بخوای مقداری که درون ادرس y هست رو اضافه کنی کافیه یک همچین چیزی بنویسی

*y= *y+4;
و چون y همون ادرس x داخلش هست پس یعنی در اصل داری x رو زیاد می کنی. پس کد زیر انتظار داریم 16 رو چاپ کنه .

int x=12;
int *y=&x;
*y= *y+4;
cout<<x;
توی C++‎ مثال بالا رو میتونی به شکل زیر هم بنویسی همون جوری که میبینی یکم کار کردن باهاش ساده تر و تمیز تره.(یکی از تفاوتای C/C++‎‎‎)

int x=12;
int& y=x;
y=y+4;
cout<<x;