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

C语言中双指针(**)的作用:为何此程序不使用会报错?

关于C语言双指针(**)的用法及报错原因解析

先直接说核心问题:你调用fun(&ptr)时传递的是指针变量ptr的地址,这个地址的类型是int**,所以fun的参数必须声明为int**才能匹配,类型不兼容就会报错。

拆解细节:

  • ptr是int*类型,指向二维数组的第一个元素a[0][0]。&ptr是取ptr这个变量本身的内存地址,它的类型是「指向int指针的指针」,也就是int**。
  • C语言里不允许隐式把int**转换成int*,如果强行把fun的参数改成int*,编译器会直接抛出类型不匹配的错误。
  • 看fun里的逻辑:**p先解引用p拿到ptr(也就是那个int*),再解引用一次就拿到了ptr指向的a[0][0]的值1,完全合理。

如果想不用双指针,你可以改调用方式:把fun(&ptr)改成fun(ptr),同时把fun的参数改成int*,函数里用printf("%d\n", *p);,这样也能正常输出结果——但这和你当前代码的传参逻辑完全是两回事。

内容的提问来源于stack exchange,提问作者Fahi Farjana Yusra

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 14:40:34