0

有人可以解释为什么将数组的内存地址分配给指针与将“普通”变量分配给指针不同吗?(int a; int* p = &a;)

我知道数组前面的 & 符号 (&arr) 指向它的内存地址,那么为什么不能以这种方式将它分配给指针呢?

float* p;
float arr[5];
p = arr; // why is this correct 
p = &arr; // and this isn't
4

1 回答 1

1

引自工作草案,编程语言 C++ 标准

4.2 数组到指针的转换

“NT 的数组”或“T 的未知边界的数组”类型的左值或右值可以转换为“指向 T 的指针”类型的纯右值。结果是指向数组第一个元素的指针。

arr与您的示例相同,&arr[0]它是指向数组第一个元素的指针。

请注意,您也可以这样做:

float (*p)[5]; // pointer to array
float arr[5];
p=&arr;

并通过以下方式访问您的元素:

   (*p)[0];
   (*p)[1];
   (*p)[2];
   ...
于 2019-07-07T20:46:16.913 回答