什么情况下变量不用赋初始值?
问题描述:
在学校中老师反复提醒我们要给每一个变量赋初始值,但是之前我在一本书中看到他说有的变量不用赋初始值
所以我想知道什么情况下什么变量不用赋初始值
答
没有初值会随机赋一个初值,这样后面如果不小心在用之前没有再赋值很容易出现奇怪的错误。建议所有的都赋初值。定义变量后,它的值不确定,除非你赋初始值。貌似有的编译器会默认初值为0。
为什么定义有些变量需要赋0值呢?
那是功能实现上的需要,一个变量不赋初始值,直接用不确定的值,那后面利用它进行运算,结果就会不正常。有的编译器会默认不赋初值的变量为0。当然这是看你的需要。
答
建议都初始化为0;
在汇编层面讲,局部变量都是直接开栈ESP往上提升,并没有在栈中初始化0,栈中保存的是垃圾数据【可能是别的函数用过之后的】
在函数结束时ESP往下落,所有做得操作都没有对栈清0,所以都是垃圾数据。如果申请一个变量不赋值的话,变量所指向的值就是这些数据【垃圾数据】。
向楼上说的,有些编译器会默认赋值为0.
答
函数的调用和结束是不会重置栈【及清零】,所以除非手动清零,否则这个数据就会留在那里,如果申请一个变量正好在这个地址。说不定还能找到这个值【前提是这块地址内容没被更改过】