我检查过自己,写了这样的程序int main() { int i; cout << i; return 0;}我运行了几次程序,结果一直都是零。我已经在C中尝试过,结果是一样的。但是我的教科书说如果不初始化在函数内部定义的变量,则变量值将保持未定义状态,这意味着该元素将采用以前驻留在内存中该位置的任何值。当程序始终为变量分配空闲存储位置时,这怎么可能?怎么可能不是零(我假设默认的可用内存值为零)?
3 回答
HUWWW
TA贡献1874条经验 获得超12个赞
如果不初始化在函数内部定义的变量,则变量值将保持未定义状态。
这是真的。
这意味着元素将采用先前驻留在内存中该位置的任何值。
这不是。
有时在实践中会发生这种情况,您应该意识到对于程序的任何给定运行,获取零或不获取零都完全适合此理论。
从理论上讲,如果需要,编译器实际上可以为该整数分配一个随机初始值,因此尝试对此进行合理化完全没有意义。但是,让我们继续前进,就好像我们假设“该元素采用先前位于内存中该位置的任何值”一样…
怎么可能不是零(我假设默认的可用内存值为零)?
好吧,这就是您假设时发生的情况。:)
四季花海
TA贡献1811条经验 获得超5个赞
该代码调用未定义行为(UB),因为未初始化使用了指针。
使用警告标志时,编译器应发出警告,-Wall例如:
warning: 'i' is used uninitialized in this function [-Wuninitialized]
cout << i;
^
碰巧的是,在您的系统上,此运行时它的值为0。这意味着该变量被分配给的垃圾值恰好为0,因为那里的内存剩余表明了这一点。
但是,请注意,内核零点相对经常出现。这意味着我可以得到零作为系统输出是很常见的,但是并不能保证也不应该将其视为承诺。
- 3 回答
- 0 关注
- 604 浏览
添加回答
举报
0/150
提交
取消