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

C语言中传递给void函数的一级指针能否修改其指向地址?

结论

仅调整func_p内部逻辑、不改变函数入参和返回值定义的前提下,不可能修改外部原指针的指向。

原理说明

C语言的参数传递默认是值传递,你把一级指针传入函数时,函数拿到的是原指针的独立副本,二者存在不同的内存空间,没有绑定关系。你在func_p里修改ptr的指向,本质是改的这个本地副本的值,完全不会影响到外部的原指针,不管做什么类型转换都绕不开这个规则。

你可以把指针直接当成普通变量理解:它的类型是int*,但本质就是存了个地址值的普通变量,传参逻辑和普通int变量没有任何区别:

int a = 1;
void test(int x) {
    x = 2; // 这里改的是x的本地副本,外部的a不会变
}

类型转换只能改变你对某块内存存储数据的解读方式,不可能凭空让你拿到外部原指针所在内存的写入权限。你要修改外部任意一个变量的值,不管这个变量是普通int还是指针类型,都必须拿到这个变量本身的地址才能写入:

  • 要修改int类型的变量,需要传它的指针也就是int*类型入参
  • 要修改int*类型的指针变量,自然就需要传它的指针也就是int**类型的二级入参

这也是你示例中func_pp能够生效的核心逻辑。

内容的提问来源于stack exchange,提问作者loukritios

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 16:57:01