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

C++向函数传递二级指针时形参地址生成与初始化相关疑问

问题解答

C++函数默认采用值传递逻辑,你对ptr变量的疑惑本质是对函数形参的内存分配逻辑不了解,原理很简单:
你调用myFunc(&p)的时候,程序会依次执行以下操作:

  1. 计算实参&p的值:也就是main函数中指针变量p本身的内存地址,对应你代码里的输出值0x7ffeefbff520
  2. 为myFunc的形参int** ptr在当前的函数栈帧上分配独立的内存空间,这个地址就是你输出的&ptr = 0x7ffeefbff4d8,这个分配过程是编译器编译阶段就提前规划好的,运行时调用函数自动完成,不需要你手动写代码处理
  3. 把实参&p的值拷贝到刚才给ptr分配的内存空间里,完成形参的初始化,所以你输出ptr的值才会和&p的输出完全一致

你说的“隐式初始化”确实存在:分配空间+拷贝实参值的整个过程都是程序自动执行的,不需要你显式写初始化代码。ptr本质就是myFunc的局部变量,它的地址和main里的任何变量都没有关联,只有它存储的值是从实参拷贝来的。

额外提醒:你当前的代码存在未定义行为:myFunc里的局部变量b会在函数返回后被销毁,你把main里的p指向b的地址,后续执行cout << *p << endl;的时候其实是访问已经被回收的栈内存,只是测试场景下这块内存还没被改写所以输出了20,实际生产环境这么写会出现不可预期的崩溃问题。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 02:06:04