C语言中矩阵的不同表示

C语言中矩阵的不同表示,c,matrix,attributes,C,Matrix,Attributes,我作了以下声明: 实施1: int m[3][3]; m[0][0] = 1; m[0][1] = 4; m[0][2] = 5; m[1][0] = 5; m[1][1] = 7; m[1][2] = 6; m[2][0] = 5; m[2][1] = 8; m[2][2] = 8; 实施2: int m[3][3]; int m = { {1,4,5}, {5,7,8}, {5,8,8}, }; 实现1工作得很好,但是实现2在我的代码中导致了错误的输出(太长

我作了以下声明:

实施1:

int m[3][3];

m[0][0] = 1;
m[0][1] = 4;
m[0][2] = 5;
m[1][0] = 5;
m[1][1] = 7;
m[1][2] = 6;
m[2][0] = 5;
m[2][1] = 8;
m[2][2] = 8;
实施2:

int m[3][3];

int m = { 
    {1,4,5},
    {5,7,8},
    {5,8,8},
};

实现1工作得很好,但是实现2在我的代码中导致了错误的输出(太长了,不能放在这里),我想使用2,因为它更紧凑。为什么我的输出结果不同?

对于我来说,下面的代码工作得很好:

#include<stdio.h>

int main()
{
    int m[3][3] = { 
    {1,4,5},
    {5,7,8},
    {5,8,8},
};
    for(int i = 0; i<3; i++){
        for(int j = 0; j<3; j++){
        printf("%d \n",m[i][j]);
    }
    }
    return 0;
}

输出是什么?请注意:实现2不能按原样工作,因为它定义了两次
m
。简化那些试图回答问题的人的工作。输出和预期输出请
int m={….}
不工作,
m
被声明为整数…如果我声明int m[3][3];如何将值放入矩阵后缀?@Pinteco:在实际代码中很少需要以这种方式重新初始化数组。如果一个程序中需要多组准备好的数据,通常最好定义多个数组并使用当前需要的数组,而不是将所有数据复制到一个数组中。然而,如果需要将一组准备好的值复制到一个数组中,可以使用
memcpy(m,(int[3][3]){{1,4,5}、{5,7,8}、{5,8,8}、}、sizeof m)
1 
4 
5 
5 
7 
8 
5 
8 
8