【问题标题】:Incompatible pointer type warning re pointer to array of int pointers不兼容的指针类型警告重新指向 int 指针数组的指针
【发布时间】:2018-11-23 23:39:30
【问题描述】:

我编写了以下代码,声明了一个由 5 个指向 int 的指针组成的数组,然后是一个指向上述数组地址的指针:

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

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

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

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

非常感谢。

【问题讨论】:

标签: c arrays pointers


【解决方案1】:

在声明中

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;

这是错误的,因为pint** 类型,它应该指向arr 而不是&arr

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

正确的方法是

int **p= arr;

现在您可以使用 p as 打印数组 a 元素

printf("%d %d\n",*p[0],*p[1]);

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      int* arr[5] 是指向 int 指针的指针,所以 &arr 是指向 int 指针的指针。

      【讨论】:

      • int* arr[5] 不是指向指针的指针。它是一个指针数组。所以&arr 是一个指向 int 指针数组的指针。
      猜你喜欢
      • 1970-01-01
      • 2020-10-11
      • 1970-01-01
      • 1970-01-01
      • 2014-10-10
      • 2015-10-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多