جایگاه اشاره گرها در زبان C – بخش دوم

در صورتی که بخش اول رو مطالعه نکردید که در درک درست این بخش با مشکل روبرو بشید، پیشنهاد می کنم، بخش اول رو ابتدا مطالعه کنید.

۱-۲– عملگرهای اشاره گر

عملگر & (آدرس) و ∗(محتویات)

هر یک از این دو عملگر یک عملوند دارند . عملگر & ، آدرس عملوند خودش را مشخص می کند. عملگر ∗ محتویات جایی را مشخص می نماید که عملوندش به آن اشاره می کند.

«متاسفانه تصویر حذف شده است بزودی جایگیزین می شود»

اشاره گرها در زبان c دارای نوع اند. یعنی وقتی اشاره گری از نوع int تعریف می شود، باید به متغیر هایی از نوع int اشاره نماید و اشاره گر از نوع double باید به متغیر هایی از همین نوع اشاره نماید. اگر نوع متغیری که آدرس آن در یک اشاره گر قرار می گیرد، با نوع اشاره گر یکسان نباشد، کامپایلر زبان c خطایی را اعلام نمی کند.

«متاسفانه تصویر حذف شده است بزودی جایگیزین می شود»

۲– اعمال روی اشاره گرها

تعداد اعمالی که می توان روی اشاره گر ها انجام داد بسیار کمتر از اعمالی است که روی متغیرهای دیگر می توان انجام داد.

۲-۱ – عمل انتساب اشاره گرها به یکدیگر

اگر x و y دو متغیر باشند، دستور x=y آنچه را که در y قرار دارد در x قرار می دهد. این عمل را انتساب y به x گویند. دو اشاره گر را نیز می توان به یکدیگر نسبت داد. در این صورت هر دو اشاره گر به یک محل از حافظه اشاره خواهند کرد.

int table[5]={1,4,5,2,3};
int *p,*q;
p=table;
q=p;
printf(“%d”,*(q+1)); 

«متاسفانه تصویر حذف شده است بزودی جایگیزین می شود»

int *p1, *p2, *p3, a, b, c;
a = 50;
b = 100;
c = 200;
p1 = &a;  // p1 = Address a and *p1 = 50 and assume that &p1 = 10000
p2 = &b;  // p2 = Address b and *p2 = 100 and assume that &p2 = 10020
p3 = &c;  // p3 = Address c and *p3 = 200 and assume that &p3 = 10040
*p1 = *p2;   // *p1 = *p2 = 100 and &p1 = 10000 and &p2 = 10020
p1 = p3;   // &p1 = &p3 = 10040 and *p1 = *p3 = 200

در کد بالا و در خط ۵ اشاره گر p1 به جایی که متغیر a در حافظه ذخیره شده اشاره می کند بنابراین *p1 برابر با مقدار آن آدرس یعنی ۵۰ خواهد شد. در دستور خط بعدی آدرس جایی که متغیر b در آنجا ذخیره شده درون اشاره گر p2 قرار می گیرد یعنی به آن آدرس اشاره می کند و چون محتویات آن آدرس برابر با ۱۰۰ است پس مقدار *p2 برابر با ۱۰۰ می شود. در سطر ۸ با نوشتن این دستور فقط محتویات جایی که p1 به آنجا اشاره می کند درون درون جایی که p2 به آنجا اشاره می کند ریخته می شود و آدرس دو اشاره گر تغییر نخواهد کرد. اما در سطر ۹ آدرس جایی که p3 به آنجا اشاره می کند در اشاره گر p1 قرار می گیرد، بنابراین جایی که p1 به آنجا اشاره می کرد برابر با جایی می شود که p3 اشاره می کند که به ازاء این تغییر بنابراین محتویات جایی که p1 به آنجا اشاره می کرد به مقدار ۲۰۰ تغییر می کند.

ادامه دارد …

اشتراک گذاری

اشتراک گذاری در facebook
اشتراک گذاری در twitter
اشتراک گذاری در linkedin
اشتراک گذاری در reddit
اسکرول به بالا