عملگر های مربوط به اشارهگر
#pointer #اشاره_گر
🔹عملگر های مربوط به اشارهگر :
در رابطه با استفاده از اشارهگر ها دو عملگرِ * و & مورد استفاده قرار میگیرند.
🔺عملگر * :
برای تعریف یک اشارهگر و هم چنین مشخص کردن محتویات جایی که متغیر اشارهگرش به آن اشاره میکند استفاده میشود.
🔺عملگر & :
آدرس جایی که متغیر اشارهگرش به آن اشاره می کند را بر میگرداند.
به عنوان مثال به این قطعه کُد توجه کنید:
int x;
double y;
int *ptrP1 , *ptrP2;
x = 2018;
y = 1397;
ptrP1 = &x; //1️⃣
ptrP2 = &y; //2️⃣
کُد بالا یک متغیر صحیحِ 4 بایتی به نام x در خط بعد یک متغیر 8 بایتی به نام y و در نهایت دو اشارهگر صحیحِ 4 بایتی با نام ptrP1 و نام ptrP2 ایجاد میکند.
فرض کنید متغیر x در خانهی 100 حافظه باشد و چون 4 بایت است پس 4 بایت از حافظه را اشغال میکند هم چنین فرض کنید متغیر y در خانهی 105 حافظه باشد و چون 8 بایت است پس 8 بایت از حافظه را اشغال میکند.
حال دستور 1️⃣ باعث میشود اشارهگر ptrP1 به x و دستور 2️⃣ باعث میشود
اشارهگر ptrP2 به y اشاره کند.
🔺اما اگر برنامهی بالا را اجرا کنیم، جواب درستی نخواهیم گرفت ؛ چرا
اگر ما اشارهگر ptrP1 را چاپ کنیم عدد 2017 چاپ خواهد شد ولی اگر اشارهگر ptrP2 را چاپ کنیم عدد 1396 چاپ نخواهد شد و جواب یا چیز دیگری است یا کامپایلر خطا میگیرد، چرا که متغیر y هشت بایت از حافظه را اشغال میکند اما اشارهگر ptrP2 تنها میتواند به چهار بایت اشاره کند؛ این یعنی از 8 بایت متغیر y فقط 4 بایت اولش درون اشارهگر ptrP2 ریخته میشود و 4 بایت بعدی گم میشد یا کامپایلر خطا میگیرد.
🔸پس باید همیشه توجه داشته باشیم متغیرها با اشارهگرها همنوع باشند تا با خطا یا نتیجهی نادرستی روبهرو نشویم.
🔺برای حل مشکل بالا میتوانیم نوع ptrP2 را به double تغییر دهیم:
int x;
double y;
int *ptrP1 ;
double *ptrP2;
x = 2018;
y = 1397;
ptrP1 = &x;
ptrP2 = &y;
- ۰ نظر
- ۲۷ اسفند ۰۰ ، ۲۰:۰۴