首页 > 解决方案 > 数组不兼容的指针类型

问题描述

谁能告诉我黑白有什么区别

int vector[]={10,20,30}
int *p = vector

int *p= &vector

我知道通过提及数组名称,我们得到它的基址。第二个声明是给我警告

从不兼容的指针类型初始化

为什么警告,这两个语句都给出了数组基地址。

标签: carrayspointers

解决方案


在表达式中使用时,数组名称在大多数情况下会衰减为指向其第一个元素的指针。

所以这:

int *p = vector;

相当于:

int *p = &vector[0];

的类型&vector[0]int *,所以类型是兼容的。

数组不衰减的少数情况之一它是地址运算符的对象&。然后&array是数组的地址,类型为int (*)[3],即指向大小为 3 的数组的指针。这与 不兼容int *,因此出现错误。

尽管数组的地址和它的第一个元素的地址具有相同的,但它们的类型不同。


推荐阅读