動的行列を割り当てるCで関数を作成します。その考え方は、要素が配列へのポインタである配列を割り当てることです。私が関数でそれをしたいのであれば、正しいコードは何ですか?動的行列を割り当てる関数を作成します。
この
f(***matrix)
またはこの
f(**matrix)?
私は最初のものを言うだろうが、私はよく分かりません。ありがとうございました!
動的行列を割り当てるCで関数を作成します。その考え方は、要素が配列へのポインタである配列を割り当てることです。私が関数でそれをしたいのであれば、正しいコードは何ですか?動的行列を割り当てる関数を作成します。
この
f(***matrix)
またはこの
f(**matrix)?
私は最初のものを言うだろうが、私はよく分かりません。ありがとうございました!
はおそらく
double **
allocate_array(size_t rows, size_t cols)
{
double **array = malloc(cols * sizeof(*array));
if (array == NULL) return NULL;
for (size_t i = 0; i < cols; i++) {
array[i] = malloc(rows * sizeof(*array[i]));
for (size_t j = 0; j < rows; j++) array[i] = 0.0;
if (array[i] == NULL) {
while (i != 0) free(array[--i]);
free(array);
return NULL;
}
}
return array;
}
'sizeof(** array)の代わりに一貫性を保つために' sizeof(* array [i]) '(または' sizeof'は演算子:sizeof * array [i] ')と書くでしょう。いずれにしても、内部クリーンアップループのためではなく、少なくとも1つ、...-) – alk
これは*素晴らしい*ですが、 'calloc()'は誤解を招きます。浮動小数点ゼロがビット単位でゼロになる必要はありません( 'NULL'はビット単位でゼロである必要はありません)。 'calloc()'によって行われた初期化は役に立たない。 – EOF
@alk、EOF:良い点。編集されました。 – kdmurrray91
どちらも有効な関数のプロトタイプではないような何かをしたい、とどちらもこのような割り当てのために有用*関数呼び出し式*があります。 – EOF