C 分配一个特定的二维数组,非常简单

C 分配一个特定的二维数组,非常简单,c,arrays,C,Arrays,关于C语言中的数组,我有一个非常基本的问题。 我有这个结构: struct Matrix{ int rows; int cols; int** matrix; }; 当我试图使用这个结构并声明一个矩阵时,我遇到了这个问题 Matrix matrix; matrix->matrix = (int**) malloc(3*sizeof(int*));//allocates pointer to a pointers array for (int i = 0; i

关于C语言中的数组,我有一个非常基本的问题。 我有这个结构:

struct Matrix{   
int rows;
int cols;
int** matrix;
};
当我试图使用这个结构并声明一个矩阵时,我遇到了这个问题

Matrix matrix;           
matrix->matrix = (int**) malloc(3*sizeof(int*));//allocates pointer to a pointers array

for (int i = 0; i <3; i++){

    matrix->matrix[i] = (int*) malloc(3*sizeof(int));
}//allocating a 3X3 array

matrix->matrix={1,2,3,4,5,6,7,8,9};
有人知道怎么做吗?在我看来,这是一件非常简单的事情。
非常感谢

您尝试应用的初始化类型仅在声明时有效

例如:

int array[9]    = {1,2,3,4,5,6,7,8,9};
int table[3][3] = {{1,2,3},{4,5,6},{7,8,9}};
您可以按如下方式初始化矩阵:

for (int i=0; i<3; i++)
    for (int j=0; j<3; j++)
        matrix->matrix[i][j] = i*3+j+1;
用于(int i=0;i
#包括
#包括
类型定义结构矩阵{
int行;
int cols;
int**矩阵;
}基质;
矩阵*创建_矩阵(int行、int列、常量int*值){
矩阵*矩阵;
矩阵=malloc(sizeof(矩阵));
矩阵->行=行;
矩阵->cols=cols;
矩阵->矩阵=malloc(行*sizeof(int*);
对于(int i=0;i矩阵[i]=malloc(cols*sizeof(int));
对于(int j=0;j矩阵[i][j]=*值++;
}
收益矩阵;
}
int main(){
矩阵*m=创建_矩阵(3,3,(int[]){1,2,3,4,5,6,7,8,9});

对于(int r=0;r
matrix->matrix
非线性数组。
for (int i=0; i<3; i++)
    for (int j=0; j<3; j++)
        matrix->matrix[i][j] = i*3+j+1;
#include <stdio.h>
#include <stdlib.h>

typedef struct Matrix{
    int rows;
    int cols;
    int** matrix;
} Matrix;

Matrix *Create_Matrix(int rows, int cols, const int *values){
    Matrix *matrix;

    matrix = malloc(sizeof(Matrix));
    matrix->rows = rows;
    matrix->cols = cols;
    matrix->matrix = malloc(rows * sizeof(int*));
    for(int i=0; i < rows ;++i){
        matrix->matrix[i] = malloc(cols * sizeof(int));
        for(int j=0;j < cols; ++j)
            matrix->matrix[i][j] = *values++;
    }

    return matrix;
}

int main(){
    Matrix *m = Create_Matrix(3, 3, (int[]){1,2,3,4,5,6,7,8,9});
    for(int r=0;r<3;++r){
        for(int c=0;c<3;++c)
            printf("%d ", m->matrix[r][c]);
        printf("\n");
    }
    return 0;
}