اشارهگرها در C
مفهوم اشارهگر، عملگرهای & و * و کاربردهای اشارهگر در C
اشارهگر چیست؟
اشارهگر (Pointer) متغیری است که آدرس حافظه یک متغیر دیگر را ذخیره میکند. تصور کنید حافظه یک خیابان طولانی است و هر متغیر خانهای با شماره (آدرس) دارد — اشارهگر یادداشتی است که شماره خانه را نگه میدارد.
عملگرهای اصلی
&— عملگر آدرس: آدرس متغیر را میدهد*— عملگر ارجاع (dereference): به مقداری که اشارهگر به آن اشاره میکند دسترسی میدهد
تعریف اشارهگر
int *ptr; // اشارهگر به int
float *fptr; // اشارهگر به float
char *cptr; // اشارهگر به char
ستاره یعنی «این متغیر اشارهگر است». نوع اشارهگر باید با نوع متغیر مقصد یکی باشد.
مثال کامل
int age = 25;
int *ptr = &age; // ptr آدرس age را نگه میدارد
printf("%d", age); // 25 — مقدار مستقیم
printf("%p", &age); // آدرس age (مثل 0x7ffe...)
printf("%p", ptr); // همان آدرس age
printf("%d", *ptr); // 25 — مقدار از طریق اشارهگر
تغییر مقدار از طریق اشارهگر
int x = 10;
int *ptr = &x;
*ptr = 50; // مقدار x از طریق اشارهگر تغییر میکند!
printf("%d", x); // 50
چرا اشارهگر مهم است؟
یادتان هست گفتیم متغیرها با مقدار (کپی) به تابع پاس داده میشوند؟ با اشارهگر میتوان متغیر اصلی را تغییر داد:
void swap(int *a, int *b) {
int temp = *a;
*a = *b;
*b = temp;
}
int main() {
int x = 5, y = 10;
swap(&x, &y); // آدرسها را میفرستیم
printf("x=%d y=%d", x, y); // x=10 y=5 ✅
}
اشارهگر NULL
اشارهگری که به جایی اشاره نمیکند را NULL میگذاریم — روش خوبی برای جلوگیری از خطا:
int *ptr = NULL;
if (ptr != NULL) {
printf("%d", *ptr); // فقط اگر معتبر باشد
}
⚠️ استفاده از اشارهگر NULL (dereference) باعث کرش برنامه میشود!
نکات مهم
*ptrدر تعریف یعنی «تعریف اشارهگر» اما در استفاده یعنی «مقدار مقصد» — با توجه به متن تشخیص دهید- همیشه اشارهگر را مقداردهی کنید — اشارهگر مقداردهینشده (wild pointer) خطرناک است
- اشارهگرها اندازه ثابت دارند (معمولاً ۸ بایت در سیستمهای ۶۴ بیتی) صرفنظر از نوعشان
این مبحث بخشی از دوره آموزش کامل زبان C است.