使用结构并在C中返回2d数组

时间:2012-02-08 18:07:46

标签: c arrays struct

我遇到一些麻烦,找到返回带有数组或指针数组的结构的最佳方法。

这是我想要做的: 我有一个结构

typedef struct {
    double *matrix;
    int cols;
    int rows;
    int nelems;
} ResultMat;

和解析文件的函数。我需要调用该函数并让它返回结构

ResultMat read (string file, string tag) {

  ResultMat mat;

  .....
  mat.cols = //some value from the file
  mat.rows = //some value from the file


  double array[rows][cols];
  //now i fill the array

  .......
  mat.matrix = *array;

  return mat;
}
数组中的

用值填充,我希望用。取回整个结构 存储在mat.matrix中的数组的数组/指针。

如何做到这一点,是否有更好的方法?我是C的新手,更熟悉OO编程,这就是为什么我找不到最佳解决方案的原因。

希望有人能给我一些帮助!感谢

2 个答案:

答案 0 :(得分:2)

我想是的 double array[rows][cols]; 将在本地函数堆栈上创建数组时出现问题。 离开功能后,这将被删除。 您还应该知道,可变长度数组不符合ANSI-C,在我看来最好不要使用它。

您应该使用指针和动态内存分配。 malloc将是这里的关键词。

希望这有帮助

答案 1 :(得分:0)

我能想到的另一种方法是将所有输出参数作为输入指针,以便你的原型函数看起来像这样:

void read (string file, string tag, double *matrix, int *cols, int *rows, int *nelms);

或者你可以保留结构并寻找类似的东西:

void read (string file, string tag, ResultMat *myStructure);

IMO,没有“更好的方式”,这些都只是不同的选择,你的另一种选择,我发现自己经常使用。