gpt4 book ai didi

c - 未初始化适当的数组元素会导致未定义的行为

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

<分区>

我在 VSC 中做了一些测试来检查数组的行为。我在一个测试的输出中遇到了这个问题,尽管数组元素定义正确,但显然发生了未定义的行为,但只是没有初始化(正确的我的意思是数组元素是用数组本身定义的,而不是额外地超过导致众所周知的未定义行为的数组边界)。

这是我的代码,下面是它的输出:

问题是关于 foo[4] 的输出,它是 8 而不是 0。

#include <stdio.h> 

int main()
{
int foo[12];
int i;

foo[5] = 6;
foo[6] = 7;
foo[7] = 8;
foo[8] = 9;
foo[9] = 10;
foo[10] = 11;
foo[11] = 12;

for(i=0 ; i<=11 ; i++)
{
printf("foo[%d] = %d\n",i,foo[i]);
}
}

输出:

foo[0] = 0
foo[1] = 0
foo[2] = 0
foo[3] = 0
foo[4] = 8
foo[5] = 6
foo[6] = 7
foo[7] = 8
foo[8] = 9
foo[9] = 10
foo[10] = 11
foo[11] = 12

此后我尝试了其他方法并想看看 foo[5] 是否也受到影响,如果我不初始化它,但事实并非如此。 foo[4] 仍然有错误的值 btw:

#include <stdio.h> 

int main()
{
int foo[12];
int i;

// foo[5] = 6;
foo[6] = 7;
foo[7] = 8;
foo[8] = 9;
foo[9] = 10;
foo[10] = 11;
foo[11] = 12;

for(i=0 ; i<=11 ; i++)
{
printf("foo[%d] = %d\n",i,foo[i]);
}
}

输出:

foo[0] = 0
foo[1] = 0
foo[2] = 0
foo[3] = 0
foo[4] = 8
foo[5] = 0
foo[6] = 7
foo[7] = 8
foo[8] = 9
foo[9] = 10
foo[10] = 11
foo[11] = 12

我的问题是:为什么在 foo[4] 处会出现未定义的行为?数组定义正确,有 12 个元素。

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