鱼C论坛

 找回密码
 立即注册
查看: 1999|回复: 4

[已解决]初始化问题

[复制链接]
发表于 2018-4-11 15:51:50 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
最近两天学习的过程中,图中的错误犯了几次 没能理解到底为什么 背后机制怎样的如内存中地址如何赋值映射的
写了一个简单的例子,定义数组,数组元素循环求和
求助问题如下:
        SUM如果只定义不初始化(整形变量),循环累加就会错误输出,SUM赋予常量之后就正常运行,没有搞懂背后机制,求指点
最佳答案
2018-4-11 16:16:14
在你的变量没有进行初始化的时候,里面存了一个垃圾值, 谁也不能确定这个值是什么, 可能是被另外的程序使用过的一块区域留下来的数据。
但是,VS的编译器。对这个东西进行了优化~ 对没有赋初值的变量~他们会给他们一个值 我记得好像是0XCC 这东西涉及到汇编~ 你有兴趣的话可以去了解一下~

图一

图一

图二

图二
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-4-11 16:08:06 | 显示全部楼层
因为这条语句
sum += a[i];
等价于
sum = sum + a[i];
如果不将sum初始化为0,
那么第一次执行的时候sum中存放的是一个随机数,所以和a[i]相加结果也是随机的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-11 16:10:00 | 显示全部楼层
定义变量就是申请一段内存空间,这段内存空间里面肯定是有值的,如果申请以后你不给赋值覆盖,他就保留是上次被修改后的值。。

一个房子,别人住过,留下了一把XX,现在你申请到了这套房子,如果你不重新放凳子进去,那么这个房子里面可能是上次别人放的任意XX。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-11 16:16:14 | 显示全部楼层    本楼为最佳答案   
在你的变量没有进行初始化的时候,里面存了一个垃圾值, 谁也不能确定这个值是什么, 可能是被另外的程序使用过的一块区域留下来的数据。
但是,VS的编译器。对这个东西进行了优化~ 对没有赋初值的变量~他们会给他们一个值 我记得好像是0XCC 这东西涉及到汇编~ 你有兴趣的话可以去了解一下~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2018-4-11 16:55:53 | 显示全部楼层
也就简答的理解为,定义以后 内存地址申请了空间 但是没有初始化  申请的内存地址可能保留上次的数据或者垃圾 VC编译给优化了成了随机数。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-1 19:29

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表