ورود

نسخه کامل مشاهده نسخه کامل : پینتر ها



Cris_Y
19-04-2007, 21:57
salam
man ye seri moshkel ba pointer ha daram
aval inke *n=*n+5 che kar mikone
khode pointer ha bein tabe ha by refrence miran ya by value
age *x be y point kone x chie
age *x be y point kone va y az bein bere x chi mishe
fargh *&x ba &*X chie? meghdaresh chie
mamnoon:46:

peyman1987
20-04-2007, 08:20
خط اولتون رو متوجه نشدم
اشاره‌گرها هميشه با رفرنس ميرن چون هميشه دارن به محل خاصي از حافظه اشاره ميکنن
خود X آدرس محل قرارگيري Y رو داره.
X هم ار بين ميره.
البته فکر کنم اين دو تا عبارت خطا باشن ولي اگه خطا نداشته باشن هر دو برابر با X هستن که توي سوال دوم جوابش رو دادم.

Cris_Y
20-04-2007, 19:14
yani x null pointer mishe
manzooram az soale aval in bood ke vaghti pointer ha ba ye adad jam shan chi mishe
ye soale dige
pointer ha ham type daran... yani pointer int ba pointer double fargh dare
az konaketoon mamnoon

hamidreza_buddy
23-04-2007, 21:52
aval inke *n=*n+5 che kar mikone
*n یعنی مقدار جایی که n داره اشاره می کنه. مثلاً اگر n داره به خونۀ آدرس 1220 اشاره می کنه و در این خانه مقدار 30 قرار دارد، *n یعنی 30. پس عبارت *n=*n+5 باعث میشه که 30 بشه 35.


khode pointer ha bein tabe ha by refrence miran ya by value
با value . چون اشاره گرها چیزی جز نوع داده نیستند. (در سیستم های 32 بیتی 4 بایت هستند)
مثلاً فرض کنید که اشاره گری به نام p داریم که داره به خانۀ 1000 حافظه اشاره می کنه. و در خانۀ 100 مقدار 20 قرار داره. فرض کنیم اون رو به یه تابع می فرستیم.

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

که تابع هم اینجوریه:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
بعد از اجرای این تابع مقدار خانۀ 1000 می شود 45 و خانۀ 1500 می شود 50 . ولی بعد از بازگشت از تابع، p هنوز هم به خانۀ 1000 اشاره می کند. زیرا خود p به صورت by value ارسال شده است و در نتیجه مقدارش را حفظ می کند.


age *x be y point kone x chie
x یک متغییر از نوع اشاره گر به اشاره گر است. یه چیزی تو این مایه ها:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

age *x be y point kone va y az bein bere x chi mishe
x هنوز هم به آدرس سابق y اشاره می کنه و در نتیجه باعث بروز نتایج اشتباه می شود (اگر باعث خطا نشود!)


fargh *&x ba &*X chie? meghdaresh chie
*&x در کل میشه مقدار خود x (مثل اینکه بنویسی x) مثلاً در مثال بالا می شه آدرس z
&*x هم مثل بالا میشه مقدار خود x . ولی تفاوتشون اینه که دومی باید حتماً روی یه اشاره گر اعما بشه ولی اولی می تونه روی هر نوع متغییری انجام بشه.


pointer ha ham type daran... yani pointer int ba pointer double fargh dare
بله. همین که شما می تونین با آرایه ها کار کنید به خاطر همینه.
ببین فرض کن که یه متغییر از نوع char داری و یکی هم int . char یک بایت هست و int چهار بایت. (همه نوع اشاره گرها هم چهار بایتی اند چون بدون توجه به نوع متغییر دارن به محلی از حافظه اشاره می کنن)

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
حال اگر به صورت زیر عمل کنیم:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
می بینید که می توان اشاره گرها را به هم cast (تبدیل) کرد.
توجه کنید که وقتی می گوییم که ip[10]=23; منظور ما این است که از خانۀ فعلی (2001) تا چهار تای بعدی را این مقدار بگذار (تا 2004)

Cris_Y
24-04-2007, 09:46
mamnoon tazihetoon moshkelamo hal kard