2012-02-08 56 views
0

返回二维数组我面对一些麻烦找到与数组或指针数组返回结构的最佳方式。与结构工作,用C

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

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

我认为 double array[rows][cols]; 将是一个问题,因为你创建的本地函数栈上的数组。 一旦你离开功能,这将被删除。 你也应该知道,变长数组不符合ANSI-C,你最好不要在我看来使用它。

您应该指针和动态内存分配工作。 malloc将是这里的关键字。

希望这有助于

+0

确定这是有道理的。我会尽力的。 – chris 2012-02-08 18:28:23

+0

不要感到沮丧!使用多维数组的指针是C中的一件事,它可以驱使你坚果!我说的是经验:-) – guitarflow 2012-02-08 18:31:08

+0

我忘记了......阵列本身不是动态的,因为行和列是固定数字。所以这意味着我每次调用方法时都必须malloc一个新数组? – chris 2012-02-08 18:36:26

0

唯一的其他办法,我能想到的,就是把所有的输出参数为输入的指针,这样你的函数原型应该是这样的:

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

,或者你可以保持结构和去是这样的:

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

IMO,没有“更好的办法”,这些都只是不同的选择,你的是另一种选择,我发现自己使用非常频繁。

+0

感谢,这给了我一些想法,但仍然有数组麻烦.... – chris 2012-02-08 18:36:59