使用 {0} 初始值设定项初始化结构时出现问题
Problem initializing a struct with the {0} initializer
我在尝试对结构使用 {0} 初始值设定项时遇到了一个奇怪的问题。
我构建的结构由一个大小为 4x4 的二维数组组成,定义如下:
typedef struct Matrix{
double array[4][4];
} mat;
当我尝试使用以下方法用零初始化结构时:
mat MAT_A = {0};
它只用零初始化了结构的一部分,但是当我做这样的事情时:
mat MAT_A = {0},MAT_B = {0};
然后当我检查 MAT_A 的内容时,它被完全初始化为零,尽管 MAT_B 部分初始化就像我刚写的开始时发生的情况:
mat MAT_A = {0};
我不知道为什么会这样,如果有任何见解,我将不胜感激。
int main(){
int i,row = 0;
mat MAT_A = {0}, MAT_B = {0};
for (i = 0; i < 16; i++)
{
if(i%4 == 0)
row++;
printf("%f,", *(*(MAT_A.array + row) + i%4));
}
return 0;
}
您没有正确打印结果:
printf("%f,", *(*(MAT_A.array + row) + i));
i
的值介于 0 到 15 之间,您正在使用该值来索引数组的第二个维度。该维度的大小仅为 4,因此您正在阅读数组末尾。这样做会触发 undefined behavior.
此处不要使用 i
,而应使用 i%4
。这样就可以让二次元索引保持在合适的范围内。
我在尝试对结构使用 {0} 初始值设定项时遇到了一个奇怪的问题。
我构建的结构由一个大小为 4x4 的二维数组组成,定义如下:
typedef struct Matrix{
double array[4][4];
} mat;
当我尝试使用以下方法用零初始化结构时:
mat MAT_A = {0};
它只用零初始化了结构的一部分,但是当我做这样的事情时:
mat MAT_A = {0},MAT_B = {0};
然后当我检查 MAT_A 的内容时,它被完全初始化为零,尽管 MAT_B 部分初始化就像我刚写的开始时发生的情况:
mat MAT_A = {0};
我不知道为什么会这样,如果有任何见解,我将不胜感激。
int main(){
int i,row = 0;
mat MAT_A = {0}, MAT_B = {0};
for (i = 0; i < 16; i++)
{
if(i%4 == 0)
row++;
printf("%f,", *(*(MAT_A.array + row) + i%4));
}
return 0;
}
您没有正确打印结果:
printf("%f,", *(*(MAT_A.array + row) + i));
i
的值介于 0 到 15 之间,您正在使用该值来索引数组的第二个维度。该维度的大小仅为 4,因此您正在阅读数组末尾。这样做会触发 undefined behavior.
此处不要使用 i
,而应使用 i%4
。这样就可以让二次元索引保持在合适的范围内。