📌  相关文章
📜  “ int array [5]”的“ array”和“&array”有什么区别?(1)

📅  最后修改于: 2023-12-03 15:35:50.795000             🧑  作者: Mango

C++ 编程笔记

“int array [5]”的“ array”和“&array”的区别

在 C++ 中,数组是非常常用的数据类型。数组在内存中是一段连续的内存空间,它们的内存地址是按照顺序排列的。我们可以使用数组名来引用这段内存空间,可以使用指针来引用数组中的某个元素。但是数组名和指针的使用有一些区别。

数组名

首先让我们来看数组名。在 C++ 中,数组名是一个常量指针,它指向数组的第一个元素。当我们声明一个数组时,我们声明的是数组名,如下所示:

int array[5];

在这个例子中,array 是一个数组名,是一个指向 int 类型的指针。当我们需要引用这个数组中的某个元素时,我们可以使用下标运算符 [],如下所示:

array[0] = 1;

在这个例子中,我们把 1 赋值给数组中的第一个元素,即 array[0]

指针

现在我们来看一下指针。指针和数组名很相似,但它们有一些不同。指针是一个变量,它保存了一个内存地址,我们可以使用指针来引用这个内存地址中的值。在 C++ 中,我们可以使用取地址符 & 来获取一个变量的地址,如下所示:

int *p = &array[0];

在这个例子中,&array[0] 获取了数组中第一个元素的地址,然后把这个地址赋值给了指针变量 p。这个语句等价于下面的语句:

int *p = array;

在这个例子中,array 是一个指向数组第一个元素的指针,它被赋值给了指针变量 p

通过指针,我们可以访问数组中的所有元素,如下所示:

p[1] = 2;
*(p + 2) = 3;

在这个例子中,p[1] = 2*(p + 2) = 3 都是把数组中的第二个元素(即 array[1])和第三个元素(即 array[2])分别赋值为 23

数组名和指针的区别

现在让我们来看一下数组名和指针之间的区别。数组名是一个常量指针,它不能被重新赋值,即不能改变它指向的内存地址。例如,下面的语句是非法的:

array = &array[1];  // 非法语句

这个语句试图把一个内存地址赋值给数组名,这是非法的。编译器会给出一个错误。

指针变量和数组名是不同的。指针变量是一个变量,它可以被重新赋值,即可以改变它指向的内存地址。例如,下面的语句是合法的:

p = &array[1];

这个语句把数组中第二个元素的地址赋值给了指针变量 p

总结

在 C++ 中,数组名和指针都是引用数组的方式。数组名是一个常量指针,它不能被重新赋值,而指针变量是一个变量,它可以被重新赋值。我们可以使用数组名或指针变量来访问数组中的元素。