Mảng (Array) trong C dùng để lưu trữ các phần tử cùng kiểu, trong khi Con trỏ (Pointer) là biến địa chỉ lưu trữ địa chỉ của một biến. Biến mảng cũng có địa chỉ, có thể được trỏ bởi con trỏ và mảng có thể được duyệt qua con trỏ. Lợi ích của con trỏ cho mảng: 1) lưu địa chỉ mảng cấp phát động, 2) truyền mảng cho hàm.
Các khác biệt khi dùng mảng và con trỏ trỏ đến mảng:
Toán tử sizeof(): với mảng in ra kích thước mảng, với con trỏ in ra kích thước kiểu int (thường là 4 hoặc 8 byte tùy kiến trúc).
Gán (assignment): biến mảng không thể gán địa chỉ biến khác, nhưng con trỏ có thể.
Giá trị đầu tiên:
array[0] == *p.Duyệt (iteration): mảng dùng chỉ số
[], con trỏ dùng phép toán con trỏ. Ví dụ:array[2] == *(p+2).
Ví dụ (C)
#include <stdio.h>
void printElement(char* q, int index) {
printf("Phan tu tai chi so(%d) la: %c\n", index, *(q + index));
}
int main() {
char arr[] = {'A', 'B', 'C'};
char* p = arr;
printf("Kich thuoc arr[]: %zu\n", sizeof(arr));
printf("Kich thuoc p: %zu\n", sizeof(p));
printf("Phan tu dau dung arr: %c\n", arr[0]);
printf("Phan tu dau dung p: %c\n", *p);
printf("Phan tu thu 2 dung arr: %c\n", arr[1]);
printf("Phan tu thu 2 dung p: %c\n", *(p + 1));
printElement(p, 2);
return 0;
}
Kết quả đầu ra
Kich thuoc arr[]: 3 Kich thuoc p: 8 Phan tu dau dung arr: A Phan tu dau dung p: A Phan tu thu 2 dung arr: B Phan tu thu 2 dung p: B Phan tu tai chi so(2) la: C