1. ホーム
  2. c

[解決済み] 2次元配列のアロケート方法がおかしい?

2022-05-17 04:30:11

質問

あるプロジェクトで、誰かがこの行を押しました。

double (*e)[n+1] = malloc((n+1) * sizeof(*e));

これは、(n+1)*(n+1)個のdoubleの2次元配列を作成するとされています。

おそらく というのは、これまでのところ、私が尋ねた誰も、これが何をするのか、正確に、どこから来たのか、なぜ機能するのか (機能すると言われていますが、私はまだそれを買ってはいません) を教えてくれなかったからです。

おそらく私は明白な何かを見逃しているのでしょうが、誰かが私に上記の行を説明してくれるとありがたいのです。なぜなら、個人的には、私たちが実際に理解しているものを使うなら、もっと気分が良くなるからです。

どのように解決するのですか?

変数 e の配列へのポインタです。 n + 1 型の要素の配列へのポインタです。 double .

に対する参照解除演算子を用いて e の基底型が得られます。 e の配列です。 n + 1 型の要素の配列です。 double となります。

malloc の呼び出しは単に e (上記で説明) を受け取り、そのサイズを取得し、それを n + 1 を掛けて、そのサイズを malloc 関数に渡す。基本的に、配列の割り当てを n + 1 の配列は n + 1 の要素 double .