我编写了以下代码,声明了一个包含5个指向int的数组,然后是一个指向所提到数组地址的指针:
int* arr[5];
int** p=&arr;
在使用gcc编译时,我收到以下警告:
从不兼容的指针类型初始化[-Wincompatible-pointer-types] int ** p =& arr;
为什么int** p
指针类型错误,&arr
是指向int
指针的指针?
非常感谢。
答案 0 :(得分:0)
将int **p = &arr
更改为int **p = &arr[0]
或int **p = arr
在第二个选项中,数组名arr
被转换为指向其第一个元素arr [0]的指针(即指向int的指针)。
答案 1 :(得分:0)
声明
int* arr[5];
arr
是5
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的指针的指针。