نکاتی در مورد اشاره گرها
علیرغم قدرت زیادی که استفاده از اشاره گرها در زبان به برنامه نویس می دهد
اشکالاتی را نیز می تواند بوجود آورد که برنامه نویس باید آنها را در نظر داشته
باشد .
اشکال اول ) استفاده از اشاره گرهایی که قبلا” مقدار نگرفته اند .
مثال ۱: main)(
{
int x/*p ;
x=10 ;
*p=x ;
}
دربرنامه مثال ۱ عدد ۱۰ به متغیر x نسبت داده میشود و دستور *p=x; به ماشین
می گوید ” محتویات متغیر x را در آدرسی که اشاره گر p به آن اشاره می کند قرار
بده ” . چون اشاره گر p بجایی در حافظه اشاره نمیکند ( قبلا” مقدار نگرفته است )
عمل مورد نظر انجام نخواهد شد. برای رفع این مشکل کافی است در اشاره گر p مقدار
معتبری قرار گیرد .
اشکال دوم ) عدم استفاده صحیح از اشاره گرها
مثال ۲: main)(
{
int x / *p ;
x=10 ;
p=x ;
printf(“\n %d”/*p );
}
هدف برنامه مثال ۲ این بود که مقدار متغیرx را که برابر با ۱۰ است در خروجی
چاپ نماید ولی به دلیل نادرست بودن دستور p=x; ( با توجه به اشاره گر بودن p )
نتیجه مطلوب حاصل نخواهد شد . این دستور موجب می شود تا عدد ۱۰ ، نه بعنوان یک
مقدار بلکه بعنوان یک آدرس به اشاره گر p منتقل گردد . برای رفع این مشکل کافی
است این دستور را بصورت p=&x; نوشت تا آدرس متغیر x به اشاره گر p منتقل شود .
اشکال سوم ) فرض هایی که برنامه نویس در مورد محل قرار گرفتن متغیرها در حافظه
دارد .
وقتی که متغیرها در حافظه قرار می گیرند ، جای آنها برای ما مشخص نیست و در
هر جایی که فضایی کافی وجود داشته باشد این متغیرها در آنجا ذخیره می شوند .
به همین دلیل مقایسه اشاره گرهایی که به عناصری از یک نوع اشاره نمی کنند صحیح
نبوده و با مشکل مواجه می گردد ( مثال های ۳و ۴و ) .
مثال ۳: main)(
{
char s[80]/y[80] ;
char *p1 / *p2 ;
p1=s ;
p2=y ;
if(p1
printf(“p1 points to lower addree.”);
}
در مثال ۳ مقایسه p1و p2و با یکدیگر صحیح نیست ، زیرا محل قرار گرفتن
رشته های sو yو برای ما مشخص نیست .
مثال ۴: main)(
{
int first[10]/second[10] ;
int *p / t ;
p=first ;
for(t=0 ; t<20 ; t++)
*p++=t ;
}
در مثال ۴ سعی شده که به عناصر آرایه های firstو secondو اعداد ۰ تا ۱۹ نسبت
داده شود. اگر چه ممکن است این عمل در بعضی از کامپایلرها به درستی انجام گیرد
ولی در حالت کلی این طور نیست ، زیرا ممکن است عناصر آرایه های firstو secondو
در محل های متوالی حافظه قرار نگیرند .
با اشکالاتی که تاکنون درمورد اشاره گرها گفته شد برنامه نویس باید در استفاده ا دقت کافی بخرج دهد تا با مشکل مواجه نگردد .
دیدگاه خود را بیان کنید.
باید وارد سایت شده باشید برای دیدگاه دادن