-1

我正在键入这个程序,并将 10 个整数数组的地址分配给指向 2 个整数数组的指针。

int (*a)[2],i;
int a1[10]={1,12,3,4,5};
a=a1;
printf("%d",*(*a+1));

输出为 12 但我也收到警告:

“来自不兼容指针类型的赋值[默认启用]”

为什么我会收到此警告以及如何消除此警告?

4

3 回答 3

4

有两个问题:

  1. a是一个指向两个整数数组的指针,但您尝试从一个由十个整数组成的数组中分配它。

  2. a指向数组的指针,而a1不是。

首先更改a为指向十个整数数组的指针:

int (*a)[10];

然后为它分配一个指向数组的指针:

a = &a1;
于 2013-07-26T06:15:31.800 回答
1

为什么我会收到此警告

因为a1是一个int[10],所以int *当分配给一个指针时它会衰减,但a它是类型int (*)[2]- 这些是不兼容的类型。

如何摆脱这个警告?

声明aint (*a)[10],然后使用 address-of ( &) 运算符:

a = &a1;
于 2013-07-26T06:16:07.807 回答
0

你需要编译时限制检查吗?

如果不是这样,你为什么不:

int *a, i;
int a1[10]={1,12,3,4,5};
a=&a1[0]; 
printf("%d",a[1]);
于 2013-07-26T08:02:52.547 回答