Mối quan hệ Con trỏ - Mảng
Mảng cấp phát bộ nhớ liên tục. Địa chỉ cơ sở (base address) = địa chỉ phần tử đầu tiên.
Ví dụ: int a[5] = {10,20,30,40,50};
Nếu int *p; thì p = a hoặc p = &a[0];
Tăng con trỏ (p++) nhảy theo kích thước kiểu dữ liệu (scale factor). Với int 4 byte:
p = &a[0] = 1000 p+1 = &a[1] = 1004 p+2 = &a[2] = 1008 p+3 = &a[3] = 1012 p+4 = &a[4] = 1016
Công thức: Địa chỉ a[i] = base + i * sizeof(int)
Giá trị: *(p+i) = a[i]
Chương trình minh họa
#include <stdio.h>
int main() {
int a[5];
int *p, i;
printf("Nhap 5 so: ");
for (i=0; i<5; i++) scanf("%d", &a[i]);
p = &a[0];
printf("Cac phan tu: ");
for (i=0; i<5; i++) printf("%d ", *(p+i));
return 0;
}
Kết quả
Nhap 5 so: 10 20 30 40 50 Cac phan tu: 10 20 30 40 50