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

标签 c arrays matrix structure

我有一个内部有 double** mat 数组的结构,它是一个指向 double 值指针的指针。假设矩阵名为 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;
}

最佳答案

你不能用二维数组来做到这一点。

但是,您可以使用指向一维 double 组的指针的一维数组。即使它不是真正的二维数组,它也可以在很多方面像真正的二维数组一样使用。

类似于:

#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 

关于c - 如何将矩阵读入结构内的 double** 数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46571310/

相关文章:

c - C语言中如何对链表进行排序

c - 如何从数组打印输入数据文件中的值?

javascript - 在 Three.js 中根据方向和相机位置旋转、移动和缩放对象

performance - 在 Matlab 中查找没有 NaN 的行的最快方法

c - c中的openssl aes解密

C unsigned long 转换未正确添加

c - 对 'funtion_name' 的 undefined reference

javascript - 限制 map 后结果

c++ - 为什么 const char *foo = "Hello";编译但不编译 const int *foo = 5;?

c++ - 带有 std::array 的矩阵类