我有以下代码:
int main()
{
int* abc[] ={
[3] = (&(int[3]){1,2,3}),
[2] = (&(int[2]){4,5})
};
printf("\n abc[3][1] = %d \n",abc[3][1]);
return 0;
}
我正在尝试设置数组abc
,以便该数组的特定索引指向另一个整数数组。
稍后,我将其修改为使用宏,以便在预处理过程中初始化数组,因此采用了这种方法。
代码工作正常,但我得到警告:
warning: initialization from incompatible pointer type
这是因为我的数组abc
被声明指向整数,但实际上指向整数数组吗?
如何使该警告消失?
答案 0 :(得分:3)
您在复合文字中使用的类型不正确。
数组的元素为int *
,但使用&
时,复合文字的类型为int (*)[3]
和int (*)[2]
。
应该是:
int* abc[] ={
[3] = ((int[3]){1,2,3}),
[2] = ((int[2]){4,5})
};
现在int[3]
和int[2]
都衰减到int *
。