如何将矩阵读入结构内的 double** 数组?

How to read a matrix into a double** array that is within a structure?

我有一个结构,里面有 double** mat 数组,它是一个指向双精度值的指针。假设矩阵称为 m,我可以 m.mat[i][j] 将值放入数组吗?

struct Matrix {
  size_t row;
  size_t col;
  double** mat;
};
typedef struct Matrix TMatrix;

int readMatrix(TMatrix m) {
    for(int i=0; i<m.row; i++)
    {
      for(int j=0; i<m.col; j++)
      {
        if(!scanf("%lg ", (m.mat[i][j])))
           return 0;
      }
    }
   return 1;
}

二维数组无法做到这一点。

但是,您可以使用指向一维双精度数组的一维指针数组。即使它不是真正的二维数组,它也可以在许多方面以与真正的二维数组相同的方式使用。

类似于:

#include <stdio.h>
#include <stdlib.h>
 
struct Matrix {
  size_t row;
  size_t col;
  double **mat;
};
typedef struct Matrix TMatrix;
 
void initMatrix(TMatrix *m, int row, int col) {
    m->row = row;
    m->col = col;
    int i;
    m->mat = malloc(m->row * sizeof(double*));  // allocate array of double pointers
    for (i=0; i<m->row; ++i)
    {
        m->mat[i] = malloc(m->col * sizeof(double));  // allocate array of doubles
    }
}
 
void freeMatrix(TMatrix m) {
    int i;
    for (i=0; i<m.row; ++i)
    {
        free(m.mat[i]);
    }
    free(m.mat);
}
 
int readMatrix(TMatrix m) {
    for(int i=0; i<m.row; i++)
    {
      for(int j=0; j<m.col; j++)
      {
        if(scanf(" %lg", &m.mat[i][j]) != 1) return 0;
      }
    }
    return 1;
}
 
 
void printMatrix(TMatrix m) {
    for(int i=0; i<m.row; i++)
    {
      for(int j=0; j<m.col; j++)
      {
        printf("%f ", m.mat[i][j]);
      }
      printf("\n");
    }
}
 
 
 
int main(void) {
    TMatrix a;
    initMatrix(&a, 2, 3);
    if (!readMatrix(a))
    {
        printf("input error\n");
        return -1;
    }
    printMatrix(a);
    freeMatrix(a);
 
    return 0;
}

标准输入

1 2 3 4 5 6

标准输出

1.000000 2.000000 3.000000 
4.000000 5.000000 6.000000