理想小青年 发表于 2018-4-11 15:51:50

初始化问题

最近两天学习的过程中,图中的错误犯了几次 没能理解到底为什么 背后机制怎样的如内存中地址如何赋值映射的
写了一个简单的例子,定义数组,数组元素循环求和
求助问题如下:
        SUM如果只定义不初始化(整形变量),循环累加就会错误输出,SUM赋予常量之后就正常运行,没有搞懂背后机制,求指点

BngThea 发表于 2018-4-11 16:08:06

因为这条语句
sum += a;
等价于
sum = sum + a;
如果不将sum初始化为0,
那么第一次执行的时候sum中存放的是一个随机数,所以和a相加结果也是随机的

风扫地 发表于 2018-4-11 16:10:00

定义变量就是申请一段内存空间,这段内存空间里面肯定是有值的,如果申请以后你不给赋值覆盖,他就保留是上次被修改后的值。。

一个房子,别人住过,留下了一把XX,现在你申请到了这套房子,如果你不重新放凳子进去,那么这个房子里面可能是上次别人放的任意XX。。

风过无痕丶 发表于 2018-4-11 16:16:14

在你的变量没有进行初始化的时候,里面存了一个垃圾值, 谁也不能确定这个值是什么, 可能是被另外的程序使用过的一块区域留下来的数据。
但是,VS的编译器。对这个东西进行了优化~ 对没有赋初值的变量~他们会给他们一个值 我记得好像是0XCC 这东西涉及到汇编~ 你有兴趣的话可以去了解一下~

理想小青年 发表于 2018-4-11 16:55:53

也就简答的理解为,定义以后 内存地址申请了空间 但是没有初始化申请的内存地址可能保留上次的数据或者垃圾 VC编译给优化了成了随机数。
页: [1]
查看完整版本: 初始化问题