是什么导致这些默认数组值?

时间:2018-04-27 15:18:18

标签: c arrays int kernighan-and-ritchie

我一直在使用Kernighan / Ritchie C编程语言书(第2版),在第1.6章第22页的示例中,我遇到了一些奇怪的(至少对我而言)基于我犯了一个错误。

错误是我声明了int ndigit[10]但错过了将数组中所有整数都设置为零的for循环。

奇怪的是数组中的前8个值似乎正常工作,默认为0,但最后两个默认为-373429304和32766.这导致程序中的数字计数功能按预期工作计数为8s和9s。

我解决了我的错误并修复了它,但我仍然很好奇为什么前8个值设置为0但后两个值有很大不同?

1 个答案:

答案 0 :(得分:0)

我将以一个很好的答案添加到MartinVéronneau的评论中,

What happens to a declared, uninitialized variable in C? Does it have a value?

假设您在x86 / x64 PC上,如果在函数内部声明int ndigit[10],并且它存储在堆栈中。堆栈是内存的一部分,它存储程序之前生成的所有函数调用,返回地址,函数和局部变量的参数(不动态分配)。

当函数返回时,通过向堆栈指针添加值来释放空间。 RAM中的数据保留在那里。代码执行中有一些零字节,然后与您调试的代码部分无关,而且您观察到的内容未归零。