2017-02-16 5 views
0

私は次のように行列を初期化しているとしますポインタへのポインタで行列を初期化しますか?

double** m = (double**) calloc(count, sizeof(*double)); 
for (int i = 0; i < count; i++){ 
     *(m+i) = (double*) calloc(count, sizeof(double)); 
} 

今、私は次の宣言と関数にこの行列を渡したい:

double func(void* params) 

は、取得するには、以下の正しい方法ですparamsの行列:

double** m = *(double**) params; 

次に、通常mの要素にアクセスできますか?例えば。

double a = m[1][2]; 
+0

一般的に、既存の回答を無効とするように質問を編集することが悪いフォームと見なされるような関数を呼び出します。 – EOF

+0

私はそれが私の質問には関係がないと思っていて、それは唯一の誤植だと思っています。しかし、私は理解しています。 –

答えて

1

私はあなたがこの関数の宣言

double func(void* params); 

は意味がありません

double** m = (double**) calloc(count, sizeof(double *)); 
             ^^^^^^^^^^^^^^^^ 
for (int i = 0; i < count; i++){ 
     *(m+i) = (double*) calloc(count, sizeof(double)); 
             ^^^^^^^^^^^^^ 
} 

を意味すると思います。配列(行列)のサイズは不明です。サイズを指定する必要があります。

機能は

double func(void* params, int size); 

のように宣言することができ、関数内で、あなたは

double **a = params; 

を書くことができますし、i、jは範囲に属している

a[i][j] 

のような表現を使用します[0, count)

func(m, count); 
1

あなたはどのように機能を呼び出すのかは言いませんでした。しかし、呼び出しがfunc(m)であるならば、関数内のコードは、あなたが投稿double** m = params;

コードになりconstaint違反(double **double *を割り当てる)です。まず第一に、このコードスニペット

double** m = (double**) calloc(count, sizeof(double)); 
             ^^^^^^^^^^^^^ 
for (int i = 0; i < count; i++){ 
     *(m+i) = (double*) calloc(count, sizeof(double*)); 
             ^^^^^^^^^^^^^^^ 
} 

が無効である

関連する問題