C-不兼容的指针类型使用类型为“int”的表达式初始化“int *”

时间:2016-01-12 23:44:21

标签: c++ c arrays pointers multidimensional-array

我遇到了问题,我不明白为什么编译器会给我这个警告:

  

使用类型为'int [2] [2]'

的表达式初始化'int *'的指针类型不兼容
int matrice[2][2]={4,7,3,6};
int* prova2=matrice;
for (int i=0; i<4; i++) {
printf("%d",*(prova2+i));
}

逻辑上,它有效,但我想知道为什么IDE会告诉我这一点。 我试图用数组做同样的事情,但它没有任何警告。

我知道当我声明一个类似

的数组时
int a[4]; 

a包含在内存中分配数组的地址。 因此,

之间没有差异(类型差异)
int a[4]; 

int *b= a;

为什么

之间存在差异
int matrice[2][2]

int* prova2=matrice;

1 个答案:

答案 0 :(得分:0)

array of T可以转换为T*matriceint[2]的数组,因此可以隐式转换为pointer to int[2],即可以写:

int (*prova2)[2] = matrice;

(但那显然不是你想要的)。

要获取指向第一个元素的指针,您可以这样做:

int* prova2 = &matrice[0][0];