📅  最后修改于: 2023-12-03 15:35:50.795000             🧑  作者: Mango
在 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]
)分别赋值为 2
和 3
。
现在让我们来看一下数组名和指针之间的区别。数组名是一个常量指针,它不能被重新赋值,即不能改变它指向的内存地址。例如,下面的语句是非法的:
array = &array[1]; // 非法语句
这个语句试图把一个内存地址赋值给数组名,这是非法的。编译器会给出一个错误。
指针变量和数组名是不同的。指针变量是一个变量,它可以被重新赋值,即可以改变它指向的内存地址。例如,下面的语句是合法的:
p = &array[1];
这个语句把数组中第二个元素的地址赋值给了指针变量 p
。
在 C++ 中,数组名和指针都是引用数组的方式。数组名是一个常量指针,它不能被重新赋值,而指针变量是一个变量,它可以被重新赋值。我们可以使用数组名或指针变量来访问数组中的元素。