C ++中未初始化的变量行为

我检查过自己,写了这样的程序


int main() {

 int i;

 cout << i;

 return 0;

}

我运行了几次程序,结果一直都是零。我已经在C中尝试过,结果是一样的。


但是我的教科书说


如果不初始化在函数内部定义的变量,则变量值将保持未定义状态,这意味着该元素将采用以前驻留在内存中该位置的任何值。


当程序始终为变量分配空闲存储位置时,这怎么可能?怎么可能不是零(我假设默认的可用内存值为零)?


慕运维8079593
浏览 610回答 3
3回答

HUWWW

如果不初始化在函数内部定义的变量,则变量值将保持未定义状态。这是真的。这意味着元素将采用先前驻留在内存中该位置的任何值。这不是。有时在实践中会发生这种情况,您应该意识到对于程序的任何给定运行,获取零或不获取零都完全适合此理论。从理论上讲,如果需要,编译器实际上可以为该整数分配一个随机初始值,因此尝试对此进行合理化完全没有意义。但是,让我们继续前进,就好像我们假设“该元素采用先前位于内存中该位置的任何值”一样…怎么可能不是零(我假设默认的可用内存值为零)?好吧,这就是您假设时发生的情况。:)

四季花海

该代码调用未定义行为(UB),因为未初始化使用了指针。使用警告标志时,编译器应发出警告,-Wall例如:warning: 'i' is used uninitialized in this function [-Wuninitialized]&nbsp; cout << i;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ^碰巧的是,在您的系统上,此运行时它的值为0。这意味着该变量被分配给的垃圾值恰好为0,因为那里的内存剩余表明了这一点。但是,请注意,内核零点相对经常出现。这意味着我可以得到零作为系统输出是很常见的,但是并不能保证也不应该将其视为承诺。
打开App,查看更多内容
随时随地看视频慕课网APP