arr是一个数组的名字,那么*(&arr) 是什么 ?

arr是一个数组的名字,那么*(&arr) 是什么 ? 很多人会说是数组的首元素的指针,但是&arr 的时候,arr是解释为数组的

int arr[3] = {1,2,3};
int ( * p)[3] = arr; p是指向数组arr的指针,这句没问题吧?

int a= * p; 按道理p是arr数组的指针,那么 * p就是arr数组,但是这这样写语句 * p 被解释会int*类型

编译的时候警告 * p 被认为是 int * 类型指针,这边 * p 是指向数组第一个元素1的指针

img

运行起来看下,单独输出 * p 被解释为 数组类型,* p被认为是arr数组,但是当参与到赋值运算的时候,又被解释成int* 类型

img

你好,我是有问必答小助手,非常抱歉,本次您提出的有问必答问题,技术专家团超时未为您做出解答


本次提问扣除的有问必答次数,已经为您补发到账户,我们后续会持续优化,扩大我们的服务范围,为您带来更好地服务。

我刚看了下《C专家编程》,里面也提到了&数组名 是数组的指针,而不是所谓的数组地址

img