当前位置: 首页 > article >正文

E43.【C语言】练习:传值调用和传址调用混淆点解释

1.问题

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

#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;处,打开监视窗口

3d9e46429d4c47e4aca1af55aa4533c8.png

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

有些人会错误认为:传址调用就是传递地址

传址调用只要传了地址(Function(px)中,px为int*类型,地址为NULL)可以实现改变px,其实不对

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

92ed4756a81e4606bb539438007eddae.png

f0a5984b59c24fa3a17c199017bc4aee.png

因此正确代码为

#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**参数;......

值和址是相对的

 


http://www.kler.cn/news/365515.html

相关文章:

  • 【微服务】Java 对接飞书多维表格使用详解
  • YOLO系列入门:1、YOLO V11环境搭建
  • Python游戏开发超详细第二课/一个小游戏等制作过程(入门级篇共2节)
  • SSH 的 N 大黑科技玩法
  • TS项目中如何合理的为接口定义参数类型
  • 【AI服务器】全国产PCIe 5.0 Switch SerDes 测试和分析,以11槽PCIe GPU底板(PCIe 4.0/5.0)为例(二)
  • 计算机网络:数据链路层 —— 虚拟局域网 VLAN
  • 136.只出现一次的数字
  • 万字图文实战:从0到1构建 UniApp + Vue3 + TypeScript 移动端跨平台开源脚手架
  • EfficientNet,EfficientNetV2
  • 微服务之Sentinel概念介绍及项目实战代码
  • 基于vue框架的的高校消防设施管理系统06y99(程序+源码+数据库+调试部署+开发环境)系统界面在最后面。
  • ChatGPT的模型训练入门级使用教程
  • 首届The VRAnimation Award 震撼启幕!VsoCloud独家赞助此次大赛!
  • CSSfilter实现磨砂效果
  • Java安卓开发——疑难解答篇(第九期)
  • PSINS工具箱函数介绍——inserrplot
  • Java项目实战II基于微信小程序的智慧旅游平台(开发文档+数据库+源码)
  • 手机玩使命召唤21:黑色行动6?GameViewer远程玩使命召唤教程
  • phy初始化
  • 孤岛架构与微服务架构区别
  • 搜维尔科技:视觉映射灵巧手,五指灵巧手解决方案
  • Win/Mac/Android/iOS怎麼刪除代理設置?
  • #渗透测试#安全见闻7 硬件设备的网络安全问题与潜在漏洞分析
  • 【虚幻引擎UE】UE5 音频共振特效制作
  • 《Pyhon入门:07 map与filter函数的常用用法》