c - 正在初始化未初始化的值?

标签 c variables

在 C 中,自动变量如果未初始化,则保存一个垃圾值。但是,请考虑以下程序:

int main(){
 signed char term;
 (char)term--;
 printf("%d\n",term);
}

它打印出值“7”。如果我不执行 (char)term--,它会打印值“8”。所以,它绝对没有垃圾值(value)。这不是自相矛盾吗?

最佳答案

那是垃圾。你得到 8 作为垃圾,减去得到 7。

这就是未定义的行为。仅仅因为你不断得到 8 并不意味着它是明确定义的。尝试在代码中做更复杂的事情。在 char 的上方和下方添加变量。


关于你的“测试”,你说:

However, the consistency is hard to overlook, considering that garbage should be random.

您需要检查您的假设。 “垃圾应该是随机的”是谁说的?垃圾应该根据什么来随机?垃圾随机的唯一方法是系统定期检查内存并为其分配随机数。

当我们说“随机”时,是指我们不知道它会是什么。这并不意味着它是不确定的。这些是电脑。如果你告诉他们一遍又一遍地做同样的事情,它就会一遍又一遍做同样的事情。

您的编译器和设置不断生成相同的代码,最终给您这些垃圾值。确定性,但您不能依赖这种行为:“随机”。

此外,1-800 并不意味着您要像以前那样接受它。 “8”不一定表示垃圾,因为在设置事物的方式中,您的编译器会用 8 填充它们。他的意思是 8 与任何其他数字一样都是垃圾。

关于c - 正在初始化未初始化的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1225788/

相关文章:

javascript - var 关键字和 javascript 函数的作用域

python - 有没有办法在Python中跨线程添加变量

c - 如何覆盖C中的断言宏?

c - 打开源和目的地之间的UDP套接字,修改它并将其转发到原始目的地

c++ - ARP 回复数据包的 c/c++ pcap 过滤器表达式

java - 变量重置

mysql - 是否可以在 MySQL View 中使用变量或参数?

python - 对 tensorflow 变量的切片分配

c - 仅使用 'r' 和 'w' 附加到文件

c - 为什么共享库必须与位置无关,而静态库则不然?