2012-02-08 58 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