2012-02-08 34 views
0

配列や配列を持つ構造体を返すための最良の方法を見つけるのに苦労しています。 私は、構造体構造体を操作してC言語で2次元配列を返す

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

とファイルを解析する機能を持っています。ここ

は私が何をしたいです。私は、その関数を呼び出す必要があり、それが値で満たされているアレイ内のstruct

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プログラミングに精通しています。なぜ、私は最良の解決策を見つけるのに苦労しているのですか?

誰でも私に助けてもらえますか?

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

たり、構造を維持し、ために行くことができます。おかげで

答えて

2

私は double array[rows][cols]; は、ローカル関数スタックに配列を作成すると問題になると思います。 機能を終了すると消去されます。 可変長配列はANSI-C準拠ではないことに注意してください。私の意見では使用しない方がよいでしょう。

ポインタと動的メモリ割り当てを使用する必要があります。 ここでmallocがキーワードになります。

希望これは

+0

OKとのトラブルを抱えて。私はそれを試みます! – chris

+0

イライラしないでください!多次元配列を持つポインタは、Cでナッツを動かすことができるものです!私は経験のうちに語っています:-) – guitarflow

+0

私は忘れてしまったこと...配列自体は動的ではなく、列と列は固定された数である。これは、メソッドが呼び出されるたびに新しい配列をmallocする必要があることを意味します。 – chris

0

私は考えることができる唯一の他の方法は、あなたのプロトタイプの機能は次のようになりますように、入力ポインタとして、すべての出力引数を置くことですこのような何か:

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

IMO、何の「より良い方法」がない、これらはすべて異なるだけのオプションがあり、あなたは、私は自分自身が非常に頻繁に使用した別のオプションです。

+0

感謝を助け、これは私にいくつかのアイデアを与えたが、まだ理にかなって配列.... – chris

関連する問題