【发布时间】:2018-04-27 15:18:18
【问题描述】:
我一直在研究 Kernighan/Ritchie C Programming Language book(第 2 版),在第 22 页第 1.6 章的示例中,我遇到了一些奇怪的(至少对我而言)基于我犯的错误的行为.
错误是我声明了int ndigit[10],但错过了将数组中所有整数设置为零的for循环。
奇怪的是数组中的前 8 个值似乎工作正常,默认为 0,但后两个默认为 -373429304 和 32766。这导致程序中的数字计数功能除了按预期工作外8s 和 9s 的计数。
我解决了我的错误并修复了它,但我仍然很好奇为什么前 8 个值设置为 0,而后两个值却大不相同?
【问题讨论】:
-
未初始化的局部非静态变量(包括数组)实际上是未初始化的。它们的值将是不确定的(并且看起来是随机的)。
-
您可以检查那个出色的答案。它是关于一个整数,但它适用于数组。 stackoverflow.com/questions/1597405/…
-
"错误是我声明了 int ndigit[10] 但错过了将数组中的所有整数设置为零的 for 循环。" int ndigit[10] = {0}; 强制“默认初始化”所有您没有为其提供初始化程序的元素 - 也就是将它们设置为
0。
标签: c arrays int kernighan-and-ritchie