我正在键入这个程序,并将 10 个整数数组的地址分配给指向 2 个整数数组的指针。
int (*a)[2],i;
int a1[10]={1,12,3,4,5};
a=a1;
printf("%d",*(*a+1));
输出为 12 但我也收到警告:
“来自不兼容指针类型的赋值[默认启用]”
为什么我会收到此警告以及如何消除此警告?
有两个问题:
a
是一个指向两个整数数组的指针,但您尝试从一个由十个整数组成的数组中分配它。
a
是指向数组的指针,而a1
不是。
首先更改a
为指向十个整数数组的指针:
int (*a)[10];
然后为它分配一个指向数组的指针:
a = &a1;
为什么我会收到此警告
因为a1
是一个int[10]
,所以int *
当分配给一个指针时它会衰减,但a
它是类型int (*)[2]
- 这些是不兼容的类型。
如何摆脱这个警告?
声明a
为int (*a)[10]
,然后使用 address-of ( &
) 运算符:
a = &a1;
你需要编译时限制检查吗?
如果不是这样,你为什么不:
int *a, i;
int a1[10]={1,12,3,4,5};
a=&a1[0];
printf("%d",a[1]);