سلام.
اقا من يه مشكلي با اين اشاره گر دارم خواستم بپرسم ببينم درست ميشه ايشالا.
اينو ميدونم كه & واسه اينه كه ادرس اشاره گر و بگيريم و * واسه اينه كه محتويات اشاره گر(جايي كه بهش اشاره ميكنه) رو بگيريم.
حالا شما اين دستورات رو نگاه كنيد:
;int *t
*t = 10
حالا اينو نگاه كنيد:
;cout << t
منظور از اين دستور چيه؟
يعني چرا پشت t چيزي نيست و اين در واقع به cout چي ميگه؟
فرق اين دستور با اين دستور چيه؟
;cout << *t
سلام
در اول باید بگم روشی که شما در مقدار دهی اشاره گر استفاده کردید مشکل داره . شما نباید یک اشاره گر رو مستقیم مقدار دهی بکنید . علتش اینه که یک اشاره گر وقتی توسط کامپایلر ایجاد میشه به یک جای نامشخص از حافظه اشاره میکنه و هر گونه تغییر در اون میتونه برنامه شما رو با مشکل روبرو کنه چراکه اصلا مشخص نیست که این اشاره گر به کجای حافظه اشاره میکنه و کجای حافظه رو تغییر میده . ممکنه اصلا کد های اجرایی برنامه رو توی حافظه تغییر بدین و برای همین احتمالش خیلی وجود برنامه شما با مشکل روبرو بشه و کراش کنه !!
دقت کنید که نحوه صحیح تعریف اشاره گر فقط یکی از دوحالت زیره . حالت های دیگه مشکل ساز هستند :
1- اگر قراره از اشاره گر بعدا استفاده کنیم موقع تعریف باید مقدار اونو برابر با NULL قرار بدیم . با این کار مطمعن میشیم که اشاره گر ما به هیچ جایی از حافظه اشاره نمیکنه .
2-در همون اول و در محل تعریف کردن اشاره گر ، اشاره گر رو جوری مقدار دهی اولیه میکنیم که به یک جای معلوم از حافظه اشاره کنه مثلا به یک متغیر دیگه یا یک شی دیگه یا .....
پس من اون قسمت از کد شما رو اول تصحیح می کنم ( با توجه به حالت دومی که گفتم )
حالا قسمت بعدی که هدف شماست ..... شما گفتی که منظور از ;cout << t چیه ؟ خوب منظور اینه که مقدار اشاره گر t رو چاپ کن . همون طور که باید بدونی مقدار یک اشاره گر هیچ چیزی نیست جز آدرس متغیری که بهش داره اشاره می کنه . اگر اون رو اجرا کنی آدرس متغیری که داره بهش اشاره میکنه ( یعنی آدرس متغیر P در حافظه ) رو برات چاپ میکنه !
ثانیا ، منظور از ;cout << *t یعنی محتویات جایی رو چاپ کن که t داره بهش اشاره میکنه . این یعنی مقدار متغیری که t داره بهش اشاره میکنه یا همون مقداره p یا به کلامی ساده تر همون عدده 10 ! برنامه ساده ای که اینها رو نشون میده رو برات نوشتم . لطفا اجراش کن تا برات همه چیز جا بیافته :
کد:
#include <iostream.h>
void main()
{
int p=10;
int *t=&p;
cout << "Address of P : " << t << " or " << &p << endl;
cout << "Value of P : " << *t << " or " << p << endl;
}
ممنون.
اين يه تيكه كده خيلي مفيد بود.