gpt4 book ai didi

c - 打印未初始化的数组索引给出非零

转载 作者:太空宇宙 更新时间:2023-11-04 03:31:19 25 4
gpt4 key购买 nike

我正在尝试在 stephen kochen 的 c 编程中重新创建示例 7.1

#include<stdio.h>
int main(void)
{
int values[10];
int index;

values[0]=197;
values[2]=-100;
values[5]=350;
values[3]=values[0]+values[5];
values[9]=values[5]/10;
--values[2];

for(index=0;index<10;++index)
printf("values[%i] = %i \n",index,values[index]);
return 0;
}

预期的输出应该是

values[0] = 197
values[1] = 0
values[2] = -101
values[3] = 547
values[4] = 0
values[5] = 350
values[6] = 0
values[7] = 0
values[8] = 0
values[9] = 35

但我收到的输出是相同的,只是 values[8] 的值不匹配。我收到的值是 values[8] = 1501817896。我不知道为什么?

因为看起来有点困惑。这是我收到的输出

values[0] = 197
values[1] = 0
values[2] = -101
values[3] = 547
values[4] = 0
values[5] = 350
values[6] = 0
values[7] = 0
values[8] = 1501817896
values[9] = 35

最佳答案

您还没有初始化 values[8] 和其他一些(它们具有不确定的值)。

为什么不好

C99 6.7.8 节初始化:

If an object that has automatic storage duration is not initialized explicitly, its value is indeterminate.

第 3.18 节未定义的行为:

behavior, upon use of a nonportable or erroneous program construct, of erroneous data, or of indeterminately valued objects, for which this International Standard imposes no requirements.

所以访问未初始化的值是Undefined behaviourC 中,可能会打印任何值或可能会陷入困境。

修复

  1. 将您的声明更改为:

    int values[10] = {0};
  2. 显式初始化所有未初始化的值。

  3. 将您的数组移动到全局范围或使其成为静态

关于c - 打印未初始化的数组索引给出非零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36367720/

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