提问人:John Pace 提问时间:3/31/2021 最后编辑:Some programmer dudeJohn Pace 更新时间:3/31/2021 访问量:522
GCC 警告:“从不兼容的指针类型初始化 [默认启用]”
GCC Warning: "Initialization from incompatible pointer type [enabled by default]"
问:
'''
bool loadArray(unsigned int array[8][8]) { int* p = array; ... }
'''
我有一个函数,可以使用用户输入加载array[8][8]。一切正常,但是尝试使用 gcc (c99) 编译它时,它给了我一个警告(指向“int* p = array;”),上面写着:“从不兼容的指针类型初始化 [默认启用]”。
我在代码中到底做错了什么?
答:
0赞
Lundin
3/31/2021
#1
警告是不言自明的。不能用 .它是无效的 C,因此您会收到编译器消息。unsigned int array[8][8]
int*
如果它是一个一维数组,你可以这样做,因为当在大多数表达式中使用或用作函数参数时,这样的数组会“衰减”为指向第一个元素的指针。
但是在数组数组的情况下,指向第一个元素的指针就变成了 “数组指针” 。可能不是你想要的。unsigned int [8][8]
unsigned int (*)[8]
相反,您可以遍历数组的每个维度:
for(size_t i=0; i<8; i++)
{
int* p = array[i];
}
或者,如果您只想填充数组,则:
for(size_t i=0; i<8; i++)
{
for(size_t j=0; j<8; j++)
{
array[i][j] = something;
}
}
评论
unsigned int array[8][8]
unsigned int (*array)[8]
int (*)[8]
int *
p
p
array[i][j]