You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解决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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 05:35:23