程序
include <iostream.h>
void f1( int *& j)
{
int l=20;
int *k=&l;
j=k;
}
void any_function_use_local_variables()
{
int a,b,c;
a=b=c=100;
}
int main()
{
int i=10;
int *j=&i;
f1(j);
cout<<*j<<endl;
any_function_use_local_variables();
cout<<*j<<endl;
return 0;
}
不编译程序,猜猜它的输出结果是什么?
不仔细分析这个程序就会很容易错误地得出以下结果:
20
20
而实际输出的结果是:
20
100
觉得有点莫名奇妙了是吧?
不要紧,下面我来分析一下这个程序:
main主函数中声明了指针j,并将它指向i的地址。
f1函数将指针j的引用当作参数传入,压入栈,函数体f1返回前的栈如下图所示:
┃ ┃
┣━━━━━┫
┃ k=&l ┃
┣━━━━━┫
┃ l=20 ┃<---j=k
┣━━━━━┫ ┏━━┓
┃ 参数j ┃---->┃ j ┃
┣━━━━━┫ ┗━━┛
┃ 中断入口 ┃
┣━━━━━┫
┃ ┃
由于传入的是j的引用,函数返回后j仍指向栈中l的空间。而函数返回时并没有修改栈中各个单元的值,只是将指针指向中断入口前,因此这时*j的值为20。
当调用any_function_use_local_variables()时,原来l的空间将被b的值覆盖,所以返回时再次输出*j的值时就变成100了,栈如下:
┃ ┃
┣━━━━━┫
┃ c=100 ┃
┣━━━━━┫
┃ b=100 ┃<---j
┣━━━━━┫
┃ a=100 ┃
┣━━━━━┫
┃ 中断入口 ┃
┣━━━━━┫
┃ ┃
栈中的内容很容易随着函数的调用而发生改变,通过这个例子可以得出,在使用指针时,不要轻易将指针指向栈中的空间,除非你有十成的把握。
分享到:
相关推荐
不要动电脑!直到弹出:改 1 为2 再 确定!!!!!!!切忌,一定是输入 2!!!! 1 的话,你的数据就没了!机死了别怪我! 总结 通过以上步骤,可以成功地实现联想笔记本 Win7 系统的一键还原。需要注意的是,...
该成绩统计小软件,可以根据用户输入的内容,进行不断的跟踪和计算。用户只需要在成绩对应的编辑框里面输入相应的数值之后,按下回车键就可以显示在带有滑动条的编辑框...只供需要的人使用,切忌不要作为商业的用途!
经本人在此声明,此软件为本人长时间的软件,使用中均未发现使用此软件后导致感染其他软件或其他“中毒”现象,如不放心者请不要使用该软件,请选用其他软件,请不要在CSDN里评论是病毒或者带病毒。 切忌不放心者请...
切忌惊慌,理智逃生.docx
具体实现为:一个指针指向当前已经处理好的部分的最后一个元素,另一个指针负责遍历数组。当遍历到非0元素时,将它放到第一个指针的后面,并将指针前移。这种方法不需要额外的存储空间,空间复杂度为O(1),时间...
使用threejs开发,手机端VR全景图,IOS13版本点击按钮“启动IOS全景“同样可以使用,但是有点需说明,必须使用https协议才能使用手机端陀螺仪,老版本安卓不需要HTTPS,但是新版本安卓都升级了浏览器,都必须使用...
“教师减负”切忌形式主义.pdf
"Midea美的_C3-L143C吸尘器_使用说明书用户手册参数图解图示pdf电子版下载.pdf" 本使用说明书介绍了Midea美的C3-L143C吸尘器的使用方法和注意事项,以确保用户正确使用该产品,避免可能的危险和错误操作。 产品...
礼仪指南:切忌查对方户口 在国际交往中,尊重个人隐私是非常重要的礼仪之一。个人隐私是指个人不愿意公开、私人秘密、私人事情,包括个人收入、经济状况、年龄、恋爱、婚姻、家庭生活、健康状况、私人住所等信息。...
"观看冰上项目拍照切忌开闪光灯"这一主题着重强调了在拍摄冰上运动员时,避免使用闪光灯的重要性。 首先,理解为什么不能开闪光灯的原因。冰上项目,如花样滑冰、短道速滑等,比赛场地相对较小,观众席离赛场往往...
“漂亮的炫光读条”可能是指设计上的亮点,比如使用动态光影效果或者独特的颜色搭配,使得读条更具有视觉冲击力。在Flash中,可以通过修改图形滤镜、颜色效果或动态光照来实现这样的视觉效果。 压缩包内的"flash_...
安装本维护盘会格式化你的U盘 一定要备份你U盘的重要资料 切忌安装本维护盘会格式化你的U盘 一定要备份你U盘的重要资料 切忌安装本维护盘会格式化你的U盘 一定要备份你U盘的重要资料 切忌安装本维护盘会格式化你的...
### 微服务架构谈系列1-切忌匆忙服务化 #### 重要概念与背景介绍 微服务架构作为一种新兴的技术趋势,在近年来得到了广泛的关注和应用。然而,许多企业在追求这一技术的过程中,往往忽略了其实现背后复杂的考量和...
该成绩统计源码,简单易懂,对于初学者进行学习和研究很有好处。切忌不要作为商业用途!
【高校习大商量大调研活动心得体会:调研切忌陷入形式主义漩涡】 .docx
6. **外链分流**:外链不只指向首页,应适当分散到深层页,利用长尾关键词提升各页面权重,通过内链形成内部投票机制。 近年来,搜索引擎算法不断更新,对外链的依赖度有所降低,更加重视内容质量和用户体验。因此...
《市场细分:避免“雾里看花”,洞察商机》 市场细分是现代商业战略中的重要环节,它旨在通过对消费者需求的深入理解,将整体市场划分为具有相似需求特征的消费者群体,以更精准地定位产品和服务。...
总之,SEO新手在面对挫折时,不应轻易放弃。要正视自己的技能水平,建立独特的SEO策略,坚持不懈地执行,同时对自己的职业生涯有所规划,这样才能在SEO领域不断进步,实现自我价值。记住,竞争虽激烈,但挑战也带来...
文档标题: Linux网络操作系统基础:Linux初步使用.ppt 关键词提示: 内容: Linux 光盘安装 准备工作: 下载安装光盘 收集计算机硬件信息 规划硬盘空间及网络...启动与关机 Linux切忌直接断电关机!建议使用“sync”
LINQPad 5.02.03 Premium, 安装需要.NET Framework 4.6.1. 破解步骤在压缩包Readme.txt中。 步骤说明: 1.断网 ...3.启动LINQPad.exe,菜单进入...5.使用时切忌不要更改代理设置,不要更新,否则会被覆盖,导致破解失效。