اشارهگر (Pointer)
🔵 اشارهگر (Pointer)
🔹اشارهگر ثابت (Constant Pointer)
زمانی که بخواهیم اشارهگر تنها قابلیت خواندن مکانی از حافظه را داشته باشد، آن را به صورت "ثابت" تعریف میکنیم؛ با این کار میتوانیم "آدرسهای" متفاوتی را داخل اشارهگر ذخیره کنیم اما نمیتوانیم "مقادیر" آنها را تغییر دهیم و صرفاً میتوان مقادیر آنها را خواند و مورد استفاده قرار داد.
به عنوان مثال تابع زیر دو مکان از حافظه را به عنوان ورودی میگیرد و مقادیری از حافظه را که بین این دو قرار دارند به کاربر نمایش میدهد:
void showNumbersBetween (const int *first , const int *last )
{
const int * current = first;
while ( current != last )
{
cout << *current << endl;
current++; // 1️⃣
}
}
🔺همان طور که میبینید ما نیازی به تغییر مقادیر ذخیره شده در حافظه نداشتیم، بنابراین از اشارهگر با مقدار ثابت استفاده کردیم.
با این حال در دستور 1️⃣ آدرس اشارهگر را تغییر دادیم، چرا که صرفاً "مقدار" اشارهگر ثابت است نه "آدرس" آن؛ برای اینکه آدرس اشارهگر هم ثابت تعریف شود و نتوان آن را تغییر داد میتوانیم از دستور زیر برای تعریف اشارهگر p استفاده کنیم :
int x = 0;
const int * const p = &x;
🔺دقت کنید که حتماً در زمان تعریف اشارهگر ثابت، باید آن را مقداردهی کرد همچنین هر دو دستور زیر تنها یک اشارهگر، با "مقدار" ثابت به وجود میآورد :
const int * p = &x;
int const * p = &x;