gpt4 book ai didi

c - 数组初始化的奇怪值

转载 作者:行者123 更新时间:2023-12-04 12:02:44 26 4
gpt4 key购买 nike

我是 C 语言编程的新手,我发现了一些我不明白的地方:

在没有给定值的情况下初始化数组时,我认为所有元素都将为零。我写了这几行代码...

int main()                    
{
int obj[10][4];

for (int a = 0; a < 10; a++)
{
print("%d\t%d\t%d\t%d\n", obj[a][0], obj[a][1], obj[a][2], obj[a][3]);
}
}

...并且对其输出感到非常困惑:

0       0       0       0
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 7661
7960 2697 2260 7960
1551630361 -2130960380 146780176 -2130960380

我不明白为什么有些值是零而有些不是。我更困惑的是,当我添加更多代码时,这个数字会发生变化。例如,我更改了前面的示例并添加了另一个 print()...

int main()                    
{
int obj[10][4];

print("start\tstop\tcenter\tdist\n\n");

for (int a = 0; a < 10; a++)
{
print("%d\t%d\t%d\t%d\n", obj[a][0], obj[a][1], obj[a][2], obj[a][3]);
}
}

...得到这个:

start   stop    center  dist

0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 7673
7972 2709 2272 7972
1551630361 -2130960380 146780176 -2130960380

使用更大的数组,这个数字不仅在它的末尾找到。前几个值始终为零,但随后会发生“某些事情”。

我找到了解决方案 here at SO ,使用 memset(),这对我有用,但是......这里发生了什么?

有人能用 C 语言新手能理解的词来解释一下吗?

最佳答案

简单地说,除非您自己明确地进行了初始化,否则您不能假设数组被初始化为 0。 C 标准不保证数组内容的任何内容,只是保证您会为其分配内存。
可以在此处找到有关 C 语言初始化和数组的重要引用:http://www.tutorialspoint.com/cprogramming/c_multi_dimensional_arrays.htm

关于c - 数组初始化的奇怪值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29582097/

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