امتیاز موضوع:
  • 0 رأی - میانگین امتیازات: 0
  • 1
  • 2
  • 3
  • 4
  • 5
???POINTER
نویسنده پیام
sh_teta آفلاین
كاربر دو ستاره
**

ارسال‌ها: 113
موضوع‌ها: 38
تاریخ عضویت: اردیبهشت ۱۳۸۵

تشکرها : 0
( 3 تشکر در 1 ارسال )
ارسال: #1
Toungue  ???POINTER
سلام.
اقا من يه مشكلي با اين اشاره گر دارم خواستم بپرسم ببينم درست ميشه ايشالا.
اينو ميدونم كه & واسه اينه كه ادرس اشاره گر و بگيريم و * واسه اينه كه محتويات اشاره گر(جايي كه بهش اشاره ميكنه) رو بگيريم.
حالا شما اين دستورات رو نگاه كنيد:
;int *t
*t = 10
حالا اينو نگاه كنيد:
;cout << t
منظور از اين دستور چيه؟
يعني چرا پشت t چيزي نيست و اين در واقع به cout چي ميگه؟
فرق اين دستور با اين دستور چيه؟
;cout << *t
۲۹-شهریور-۱۳۸۶, ۲۳:۳۱:۰۸
ارسال‌ها
پاسخ
Mamad2003 آفلاین
کاربر با تجربه
****

ارسال‌ها: 1,150
موضوع‌ها: 18
تاریخ عضویت: آذر ۱۳۸۲

تشکرها : 9
( 388 تشکر در 232 ارسال )
ارسال: #2
RE: ???POINTER
سلام

در اول باید بگم روشی که شما در مقدار دهی اشاره گر استفاده کردید مشکل داره . شما نباید یک اشاره گر رو مستقیم مقدار دهی بکنید . علتش اینه که یک اشاره گر وقتی توسط کامپایلر ایجاد میشه به یک جای نامشخص از حافظه اشاره میکنه و هر گونه تغییر در اون میتونه برنامه شما رو با مشکل روبرو کنه چراکه اصلا مشخص نیست که این اشاره گر به کجای حافظه اشاره میکنه و کجای حافظه رو تغییر میده . ممکنه اصلا کد های اجرایی برنامه رو توی حافظه تغییر بدین و برای همین احتمالش خیلی وجود برنامه شما با مشکل روبرو بشه و کراش کنه !!

دقت کنید که نحوه صحیح تعریف اشاره گر فقط یکی از دوحالت زیره . حالت های دیگه مشکل ساز هستند :

1- اگر قراره از اشاره گر بعدا استفاده کنیم موقع تعریف باید مقدار اونو برابر با NULL قرار بدیم . با این کار مطمعن میشیم که اشاره گر ما به هیچ جایی از حافظه اشاره نمیکنه .
2-در همون اول و در محل تعریف کردن اشاره گر ، اشاره گر رو جوری مقدار دهی اولیه میکنیم که به یک جای معلوم از حافظه اشاره کنه مثلا به یک متغیر دیگه یا یک شی دیگه یا .....

پس من اون قسمت از کد شما رو اول تصحیح می کنم ( با توجه به حالت دومی که گفتم )

کد:
int p=10;
    int *t=&p;

حالا قسمت بعدی که هدف شماست ..... شما گفتی که منظور از ;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;
}

گويند بهشت و حور و کوثر باشد  ..  جوي می و شير و شهد و شکر باشد
پر کن قدح باده و بر دستم نه      ..   نقدي ز هزار نسيه خوشتر باشد  
(آخرین ویرایش در این ارسال: ۳۰-شهریور-۱۳۸۶, ۰۱:۵۵:۱۷، توسط Mamad2003.)
۳۰-شهریور-۱۳۸۶, ۰۱:۴۷:۳۵
ارسال‌ها
پاسخ
تشکر شده توسط : t3r!p3000
sh_teta آفلاین
كاربر دو ستاره
**

ارسال‌ها: 113
موضوع‌ها: 38
تاریخ عضویت: اردیبهشت ۱۳۸۵

تشکرها : 0
( 3 تشکر در 1 ارسال )
ارسال: #3
RE: ???POINTER
ممنون.
اين يه تيكه كده خيلي مفيد بود.
۳۰-شهریور-۱۳۸۶, ۱۷:۰۰:۳۹
ارسال‌ها
پاسخ


موضوعات مرتبط با این موضوع...
موضوع نویسنده پاسخ بازدید آخرین ارسال
  delete pointer marvel_vcpp 3 2,423 ۱۴-دى-۱۳۸۵, ۱۴:۴۸:۱۹
آخرین ارسال: Mamad2003

پرش به انجمن:


کاربرانِ درحال بازدید از این موضوع: 1 مهمان

صفحه‌ی تماس | IranVig | بازگشت به بالا | | بایگانی | پیوند سایتی RSS