为什么我们必须在使用之前初始化变量?

use*_*411 7 c

可能重复:
C中声明的未初始化变量会发生什么?它有价值吗?

现在我正在读书Teach Yourself C in 21 Days.在第3章中,有一个这样的说明:

请勿使用尚未初始化的变量.结果可能无法预测.

请向我解释为什么会这样.该书没有提供进一步的说明.

Ed *_* S. 8

因为,除非变量具有静态存储空间,否则它的初始值是不确定的.你不能依赖它,因为标准没有定义它.即使是静态分配的变量也应该初始化.只需初始化您的变量,避免将来可能出现的问题.没有充分的理由不初始化变量,有充分的理由反而做.

另一方面,不要相信任何声称在21天内教你X编程语言的书.他们撒谎,给自己一本体面的书.

  • 我可以在这里迂腐,说它是*不确定*而不是未定义? (2认同)
  • @EdS `Undefined` 通常被解释为 `undefined behavior`,这意味着你的整个编程不再是真正的 `C`,而 `indeterminate` 意味着可以这样做,但你的结果将是不可预测的。 (2认同)
  • "Indeterminate"是标准使用的语言."Undefined"通常用于讨论_undefined behavior_.读取具有_indeterminate_值的变量会导致_undefined behavior_,但是变量可能包含不确定值的事实本身不会导致_undefined behavior_所以保持这些概念清晰和分离是一件好事恕我直言. (2认同)

Spu*_*ley 5

当一个变量被声明时,它会指向一块内存。

访问变量的值将为您提供那块内存的内容。

但是,在变量初始化之前,那块内存可以包含任何内容。这就是为什么使用它是不可预测的。

其他语言可能会在您分配变量时自动初始化变量,从而在这方面为您提供帮助,但作为 C 程序员,您正在使用一种相当低级的语言,它对您想用程序做什么没有任何假设。作为程序员,您必须明确地告诉程序做所有事情。

这意味着初始化变量,但除此之外还意味着更多。例如,在 C 中,您需要非常小心,一旦您完成分配的任何资源,您就必须取消分配它们。程序结束后其他语言会自动清理;但是在 C 中,如果你忘记了,你最终会出现内存泄漏。

C 会让你做很多在其他语言中很难或不可能完成的事情。但是这种权力也意味着你必须为那些你认为在其他语言中理所当然的家务活负责。