C 尝试编写一个具有特定长度数组的函数,得到奇怪的不一致结果,并且没有错误
我有: 或 我只需多次运行它,就会得到不同的结果。 但是,如果我取消注释您将在源代码中看到的那一行,它每次都会按预期工作 有人能看出我的错误吗?为什么索引4和12C 尝试编写一个具有特定长度数组的函数,得到奇怪的不一致结果,并且没有错误,c,linux,C,Linux,我有: 或 我只需多次运行它,就会得到不同的结果。 但是,如果我取消注释您将在源代码中看到的那一行,它每次都会按预期工作 有人能看出我的错误吗?为什么索引4和12 我正试着做这里建议的事情:您已经找到了C的一个特性。不过,它通常是棘手错误的来源 问题在于线路: 0: 0.000000 1: 0.000000 2: 0.000000 3: 0.000000 4: 894113943650304.000000 5: 0.000000 6: 0.000000 7: 0.000000
我正试着做这里建议的事情:您已经找到了C的一个特性。不过,它通常是棘手错误的来源 问题在于线路:
0: 0.000000
1: 0.000000
2: 0.000000
3: 0.000000
4: 894113943650304.000000
5: 0.000000
6: 0.000000
7: 0.000000
8: 0.000000
9: 0.000000
10: 0.000000
11: 0.000000
12: 0.002546
13: 0.000000
14: 0.000000
15: 0.000000
它只为变量a
保留空间。它实际上并没有将其设置为任何值。因此,a
将具有先前存在的数据的值。它通常为零,但有时是另一回事
将a
设置为零的一种方法是使用初始值设定项声明它:
mat4f a;
C语言中既不是全局变量又不是静态变量的变量不保证初始化为任何特定值 那么在排队之后呢
mat4f a = {0};
元素的值可以是任何值。根据C语言标准,读取这些未初始化的值会调用未定义的行为——任何事情都可能发生
注释掉的行显式设置元素值,使其按预期工作。删除该行时出错。您没有初始化数组
a
未初始化。和sdtio.h->stdio。h@BLUEPIXY修正了C99禁止使用thanksEmpty初始值设定项列表的问题。应该是mat4fa={0}代码>
mat4f a;
mat4f a = {0};
mat4f a;