E43.【C语言】练习:传址调用

1.问题

阅读下列代码,在Function函数返回前,px的值会因malloc的返回值而发生改变吗?

cpp 复制代码
#include <stdlib.h>
void Function(int* ptr)
{
	ptr = (int*)malloc(sizeof(int));
}

int main()
{
	int* px = NULL;
	Function(px);
	return 0;
}

2.分析

VS2022进入调试模式,下断点在return 0;处,打开监视窗口

注意到px仍然为空,Function函数返回后,ptr被销毁,空间无法释放

有些人会错误认为:传址调用只要传了地址(Function(px)中,px为int*类型,地址为NULL)可以实现改变px,其实不对

如果为变量类型为int*,则要传int***变量的地址(Function(&px)),则在Function函数中耀以二级指针int****来接收,解引用时才能改变px

因此正确代码为

cpp 复制代码
#include <stdlib.h>
void Function(int** ptr)
{
	*ptr = (int*)malloc(sizeof(int));
}

int main()
{
	int* px = NULL;
	Function(&px);
	free(px);
	return 0;
}

这样free(px);起了作用

总结:改变int类型的变量.传int*参数;改变int*类型的变量.传int**参数;......

相关推荐
fanruitian几秒前
python 机器学习 交叉验证train_test_split 网格搜索GridSearchCV
开发语言·python·机器学习
AlanAshley7 分钟前
无 SIM 卡也能打 110?手机紧急呼叫能力的软硬件技术探究
开发语言·智能手机·php
modelmd12 分钟前
Go 切片、映射常见使用场景
开发语言·后端·golang
dialect_8 小时前
KMP算法
开发语言·c++·算法
总要学点什么9 小时前
第89篇:三维特效-螺旋圆效果——让螺旋臂卷起一圈圈外扩的涟漪
开发语言·javascript·ecmascript·webgl·cesium·空间分析·1024程序员节
开开心心_Every11 小时前
快速隐藏程序工具自定义快捷键一键切换
java·开发语言·前端·spring·智能手机·word·intellij-idea
chenbingjie_c11 小时前
C++ 多态完全指南:从虚函数重写到虚函数表原理
开发语言·c++
吴卫斌11 小时前
定投ETF实战指南(四):行业/主题ETF——定投的“进攻端“
开发语言·python·股票·量化
·present·11 小时前
CSAPP(Bomb lab)
c语言·c++
超级架构师12 小时前
PRAXO-CORE 2.5.0:用 conformance 和显式边界构建 Go Agent 框架
开发语言·人工智能·后端·golang·ai编程·智能体框架·praxo-core