gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 16:32:38 26 4
gpt4 key购买 nike

我一直在阅读 Kernighan/Ritchie C 编程语言书籍(第 2 版),在第 1.6 章第 22 页的示例中,我遇到了一些基于我所犯错误的奇怪行为(至少对我来说) .

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

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

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

最佳答案

我将在 Martin Véronneau 的评论中添加一个很好的答案,

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

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

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

关于c - 是什么导致了这些默认数组值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50065510/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com