指向整数数组的指针时指针类型不兼容

时间:2013-07-26 06:13:11

标签: c pointers

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

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

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

  

“从不兼容的指针类型分配[默认启用]”

为什么我会收到此警告以及如何摆脱此警告?

3 个答案:

答案 0 :(得分:4)

有两个问题:

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

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

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

    int (*a)[10];
    

    然后为其指定一个指向数组的指针:

    a = &a1;
    

答案 1 :(得分:1)

  

为什么我收到此警告

由于a1int[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]);