Trong bài viết này, bạn sẽ tìm hiểu về mối quan hệ giữa con trỏ và mảng trong lập trình C, và sử dụng chúng một cách hiệu quả trong chương trình của mình.
Mảng có liên quan chặt chẽ với con trỏ trong lập trình C nhưng sự khác biệt quan trọng giữa chúng là, một biến con trỏ có các địa chỉ khác nhau cũng như giá trị. Trong khi đó, trong trường hợp mảng là cố định.
Ví dụ sau sẽ chứng minh điều này cho bạn:
#include <stdio.h> int main() { char charArr[4]; int i; for(i = 0; i < 4; ++i) { printf("Dia chi cua charArr[%d] = %u\n", i, &charArr[i]); } return 0; }
Kết quả:
Dia chi cua charArr[0] = 6487616 Dia chi cua charArr[1] = 6487617 Dia chi cua charArr[2] = 6487618 Dia chi cua charArr[3] = 6487619
Lưu ý: Bạn có thể nhận được địa chỉ khác nhau của một mảng. Có sự khác biệt giống nhau (sự khác nhau 1 byte) giữa bất kỳ hai phần tử liên tiếp nào của mảng charArr. Đối với con trỏ, nó có thể trỏ vào vị trí của một biến khác, nó có thể lưu trữ bất kỳ địa chỉ nào.
Nội dung chính
Mối quan hệ giữa con trỏ và mảng trong lập trình C
Ví dụ mảng:
int arr [4];
Trong lập trình C, tên của mảng luôn trỏ đến địa chỉ của phần tử đầu tiên của mảng.
Trong ví dụ trên, arr và & arr[0] trỏ tới địa chỉ của phần tử đầu tiên.
Vì địa chỉ của cả hai đều giống nhau, các giá trị của arr và & arr[0] cũng giống nhau.
arr[0] tương đương với *arr (giá trị của một địa chỉ của con trỏ)
Tương tự:
&arr[1] tương đương với (arr + 1) và arr[1] tương đương với *(arr + 1). &arr[2] tương đương với (arr + 2) và arr[2] tương đương với *(arr + 2). &arr[3] tương đương với (arr + 3) và arr[3] tương đương với *(arr + 3). . . &arr[i] tương đương với (arr + i) và arr[i] tương đương với *(arr + i).
Trong C, bạn có thể khai báo một mảng và có thể sử dụng con trỏ để thay đổi dữ liệu của một mảng.
Ví dụ: Chương trình tính tổng 6 chữ số nhập từ bàn phím với con trỏ và mảng
#include <stdio.h> int main() { int i, arr[6],sum = 0; printf("Nhap 6 so nguyen:\n"); for(i = 0; i < 6; ++i) { // (arr + i) la tuong duong voi &arr[i] scanf("%d", (arr + i)); // *(arr + i) la tuong duong voi arr[i] sum += *(arr + i); } printf("Sum = %d", sum); return 0; }
Kết quả:
Nhap 6 so nguyen: 1 2 3 4 5 6 Sum = 21