在C中,自动变量(如果未初始化)保存垃圾值.但是,请考虑以下程序:
int main(){
signed char term;
(char)term--;
printf("%d\n",term);
}
Run Code Online (Sandbox Code Playgroud)
它打印的值为'7'.如果我不这样做(char)term--,它会打印一个值'8'.所以,它肯定没有垃圾价值.这不矛盾吗?
GMa*_*ckG 15
那是垃圾.你得到8作为垃圾,减去得到7.
这是未定义的行为.仅仅因为你持续获得8并不意味着它的定义很明确.尝试在代码中执行更复杂的操作.在您的上方和下方添加变量char.
关于你的"测试",你说:
但是,考虑到垃圾应该是随机的,因此很难忽视一致性.
你需要检查你的假设."垃圾应该是随机的"谁说?根据垃圾应该随机怎么办?垃圾随机的唯一方法是系统是否定期通过内存并为其分配随机数.
当我们说"随机"时,我们的意思是我们不知道它会是什么.这并不能使它成为非确定性的.这些是电脑.如果你告诉他们一遍又一遍地做同样的事情,它会做同样的事情一遍又一遍.
您的编译器和设置会生成相同的代码,最终会为您提供这些垃圾值.确定性,但你不能依赖这种行为:"随机".
此外,1-800并不意味着你像你一样采取这个."8"并不一定表示垃圾,就像设置事物一样,你的编译器用8填充它们.他的意思是8就像任何其他数字一样垃圾.