我正在键入这个程序,并将 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]);