اشاره‌گرها در C

مفهوم اشاره‌گر، عملگرهای & و * و کاربردهای اشاره‌گر در C

اشاره‌گر چیست؟

اشاره‌گر (Pointer) متغیری است که آدرس حافظه یک متغیر دیگر را ذخیره می‌کند. تصور کنید حافظه یک خیابان طولانی است و هر متغیر خانه‌ای با شماره (آدرس) دارد — اشاره‌گر یادداشتی است که شماره خانه را نگه می‌دارد.

عملگرهای اصلی

تعریف اشاره‌گر

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) باعث کرش برنامه می‌شود!

نکات مهم

این مبحث بخشی از دوره آموزش کامل زبان C است.

ابزارهای مرتبط