使用 {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。这样就可以让二次元索引保持在合适的范围内。