如何解决C语言中int*与int**指针类型不兼容的初始化错误
解决int**与int*类型不兼容的初始化错误
你遇到的initialization of 'int **' from incompatible pointer type 'int *'错误,根源是类型不匹配:
p是int*类型,指向数组的第一个int元素;g是int**类型,指向的是一个int*类型的指针。
直接把int*赋值给int**,编译器会判定类型不兼容,触发警告。
正确的修正方式分两种情况:
情况1:让二级指针指向一级指针p
如果你确实需要二级指针指向p(比如funzione2要求接收二级指针参数),需要取p的地址来初始化g:
int **g = &p;
此时要访问数组元素,需先解引用g得到p(数组首地址),再用下标访问:
for(i=0;i<(sizeof(arr)/sizeof(arr[0]));i++) printf("%d\n", (*g)[i]);
对应的funzione2函数定义可参考(以数组元素修改为例):
void funzione2(int **g, int len) { for(int j=0; j<len; j++) { (*g)[j] += 1; // 示例:给每个数组元素加1 } }
情况2:纠正对双指针传递数组的误解
如果你的初衷只是想换一种方式传递数组给函数,其实数组名本身会退化为int*,不需要强行使用二级指针。若funzione2的功能和funzione类似,直接把p传给funzione2,同时将funzione2的参数改为int*即可。
关键注意事项
原代码中printf("%d\n",g[i]);会触发未定义行为:错误赋值后,g[i]会把数组里的int值当成指针地址去解引用,大概率导致程序崩溃或输出乱码,必须修正。
内容的提问来源于stack exchange,提问作者Cromocon
相关产品推荐
相关产品推荐

