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