Có thể bạn sẽ không hiểu chương này tới khi bạn đọc qua chương về Con trỏ trong C.
Vì thế giả sử rằng bạn đã hiểu biết chút nào đó về con trỏ trong Ngôn ngữ C, vậy chúng ta cùng bắt đầu: Một tên mảng là một con trỏ hằng số tới phần tử đầu tiên của mảng. Vì thế, trong khai báo:
double phithuebao[50];
phithuebao là một con trỏ tới &phithuebao[0], mà là địa chỉ của phần tử đầu tiên của mảng phithuebao. Do vậy, đoạn chương trình sau gán p địa chỉ của phần tử đầu tiên của phithuebao:
double *p; double phithuebao[10]; p = phithuebao;
Sử dụng các tên mảng như là các con trỏ hằng số là hợp lệ, và ngược lại. Vì thế, *(phithuebao + 4)
là cách chính thống để truy cập dữ liệu tại phithuebao[4].
Một khi bạn lưu địa chỉ của phần tử đầu tiên trong p, bạn có thể truy cập các phần tử mảng bởi sử dụng *p, *(p+1), *(p+2), ….
Dưới đây là ví dụ để chỉ tất cả các khái niệm được đề cập ở trên:
#include <stdio.h> int main () { /* mot mang gom 5 phan tu */ double phithuebao[5] = {50.40, 30.24, 108.40, 56.12, 45.26}; double *p; int i; p = phithuebao; /* Hien thi gia tri cac phan tu trong mang */ printf( "Hien thi gia tri cac phan tu trong mang boi su dung con tro\n\n"); for ( i = 0; i < 5; i++ ) { printf("*(p + %d) : %f\n", i, *(p + i) ); } printf( "\n\nHien thi gia tri boi su dung *phithuebao la dia chi\n\n"); for ( i = 0; i < 5; i++ ) { printf("*(phithuebao + %d) : %f\n", i, *(phithuebao + i) ); } printf("\n===========================\n"); printf("Hoctv chuc cac ban hoc tot! \n"); return 0; }
Biên dịch và chạy chương trình C trên sẽ cho kết quả:
Trong ví dụ trên, p là một con trỏ tới double, mà có nghĩa là nó có thể lưu giữ địa chỉ của một biến kiểu double. Một khi chúng ta có địa chỉ trong p, thì sau đó *p
sẽ cung cấp giá trị có sẵn tại địa chỉ được lưu trong p, như chúng tôi đã chỉ trong ví dụ trên.