将指针分配给数组的内存地址时,为什么不必使用地址运算符?

时间:2018-07-14 01:34:27

标签: c++ pointers

当您希望指针指向变量的内存地址时,可以使用地址运算符(&),但是当您希望指针指向数组时,仅使用不带地址运算符的数组名称,这是为什么呢?

2 个答案:

答案 0 :(得分:2)

前提不正确。如果不使用&,则不会获得指向数组的指针;您将获得一个指向数组第一个元素的指针。

也就是说:

int arr[] = { 1, 2, 3, 4 };

int *p1 = arr;
int *p2 = &arr[0];

int (*p3)[4] = &arr;

p1p2是等效的。它们都指向数组的第一个元素arr[0]

p3是指向整个数组的指针,它确实需要&

答案 1 :(得分:0)

将数组实现为内存中的连续内存位置。当你写类似

int arr[] = {1, 2, 3};
int *p = arr

然后这里arr只是基本类型int的指针,指向数组中的第一个元素,而[]运算符只是在帮助其递增

例如

arr[2]; // same as *(arr+2)
p[2]; // same as *(p+2) i.e. arr[2]

正如@melpomene所述,您的问题并不完全正确。指向数组的指针意味着类似

int (*p)[3] = &arr;

这里的指针的基本类型为int [3],因此当您递增(p++)时,p将会递增3 int

在多维数组的情况下,指向数组的指针更为明显