我遇到了问题,我不明白为什么编译器会给我这个警告:
使用类型为'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;
答案 0 :(得分:0)
array of T
可以转换为T*
。 matrice
是int[2]
的数组,因此可以隐式转换为pointer to int[2]
,即可以写:
int (*prova2)[2] = matrice;
(但那显然不是你想要的)。
要获取指向第一个元素的指针,您可以这样做:
int* prova2 = &matrice[0][0];