不兼容的指针类型警告重新指向int指针数组

时间:2018-06-14 08:46:29

标签: c arrays pointers

我编写了以下代码,声明了一个包含5个指向int的数组,然后是一个指向所提到数组地址的指针:

int* arr[5];
int** p=&arr;

在使用gcc编译时,我收到以下警告:

  

从不兼容的指针类型初始化[-Wincompatible-pointer-types]      int ** p =& arr;

为什么int** p指针类型错误,&arr是指向int指针的指针?

非常感谢。

3 个答案:

答案 0 :(得分:0)

int **p = &arr更改为int **p = &arr[0]int **p = arr

在第二个选项中,数组名arr被转换为指向其第一个元素arr [0]的指针(即指向int的指针)。

答案 1 :(得分:0)

声明

int* arr[5];

arr5 int指针的数组。假设它指向a,它是5整数的数组。它看起来像

int a[5]=  {1,2,3,4,5};
int* arr[5] = {a,a+1,a+2,a+3,a+4};

现在写的时候

int** p=&arr;

这是错误的,p属于int**类型,它应该指向arr而不是&arr

不是&指向指向int的指针吗?不,不是, &arr 指向数组的指针指向int a[0]等的指针

正确的方法是

int **p= arr;

现在,您可以使用a作为

打印数组p元素
printf("%d %d\n",*p[0],*p[1]);

答案 2 :(得分:-4)

int * arr [5]是指向int的指针,因此& arr是指向指向int的指针的指针。