اشاره‌گرها و آرایه‌ها

رابطه نزدیک اشاره‌گرها و آرایه‌ها، حساب اشاره‌گر و پیمایش آرایه با اشاره‌گر

رابطه اشاره‌گر و آرایه

در C نام آرایه عملاً آدرس عنصر اول آن است! پس اشاره‌گر و آرایه رابطه نزدیکی دارند:

int numbers[4] = {10, 20, 30, 40};
int *ptr = numbers;  // بدون & — چون خود numbers آدرس است

printf("%d", *ptr);        // 10 (عنصر اول)
printf("%d", numbers[0]);  // 10 — همان!

دسترسی به عناصر با اشاره‌گر

printf("%d", *(ptr + 0));  // 10 — معادل numbers[0]
printf("%d", *(ptr + 1));  // 20 — معادل numbers[1]
printf("%d", *(ptr + 2));  // 30 — معادل numbers[2]

💡 numbers[i] در واقع همان *(numbers + i) است! کامپایلر براکت را به اشاره‌گر تبدیل می‌کند.

حساب اشاره‌گر (Pointer Arithmetic)

وقتی به اشاره‌گر عدد اضافه می‌کنید، به اندازه sizeof نوع جابه‌جا می‌شود نه یک بایت:

int *p = numbers;      // آدرس عنصر ۰
p++;                    // حالا به عنصر ۱ اشاره می‌کند (۴ بایت جلو)

پیمایش آرایه با اشاره‌گر

int numbers[5] = {10, 20, 30, 40, 50};
int *ptr = numbers;

for (int i = 0; i < 5; i++) {
    printf("%d ", *ptr);
    ptr++;  // حرکت به عنصر بعدی
}

مثال: جمع عناصر با اشاره‌گر

int sum = 0;
for (int i = 0; i < 5; i++) {
    sum += *(numbers + i);
}

اشاره‌گر و رشته

رشته هم آرایه است پس همین قواعد اعمال می‌شود:

char str[] = "Hello";
char *p = str;

while (*p != \x27\x5c0\x27) {
    printf("%c", *p);
    p++;
}

تفاوت‌های مهم

ویژگیآرایهاشاره‌گر
اندازه با sizeofکل آرایه ✅فقط اندازه اشاره‌گر ❌
جابه‌جایی (++)نمی‌توان ❌می‌توان ✅
تخصیص مجددنمی‌توان ❌می‌توان ✅

نکات مهم

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

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