Con trỏ và mảng.
Trong thực tế, tên của một mảng tương đương với địa chỉ phần tử đầu tiên của
nó, giống như một con trỏ tương đương với địa chỉ của phần tử đầu tiên mà nó
trỏ tới, vì vậy thực tế chúng hoàn toàn như nhau. Ví dụ, cho hai khai báo sau:
int numbers [20];
int * p;
lệnh sau sẽ hợp lệ:
p = numbers;
Ở đây
p
và
numbers
là tương đương và chúng có cũng thuộc tính, sự khác biệt
duy nhất là chúng ta có thể gán một giá trị khác cho con trỏ
p
trong khi
numbers
luôn trỏ đến phần tử đầu tiên trong số 20 phần tử kiểu
int
mà nó được định
nghĩa với. Vì vậy, không giống như
p
- đó là một biến con trỏ bình thường,
numbers
là một con trỏ hằng. Lệnh gán sau đây là không hợp lệ:
numbers = p;
bởi vì
numbers
là một mảng (con trỏ hằng) và không có giá trị nào có thể được
gán cho các hằng.
Vì con trỏ cũng có mọi tính chất của một biến nên tất cả các biểu thức có con
trỏ trong ví dụ dưới đây là hoàn toàn hợp lệ:
// more pointers
#include <iostream.h>
int main ()
{
int numbers[5];
int * p;