プロジェクトで、誰かが次の行をプッシュしました:
double (*e)[n+1] = malloc((n+1) * sizeof(*e));
おそらく(n + 1)*(n + 1)doubleの2次元配列を作成します。
おそらく、これまでのところ、私が尋ねた誰も、これが何をするのか、正確に、それがどこから来たのか、なぜそれが機能するのかを伝えることができなかったので、私はそうではありませんまだそれを購入しています)。
おそらく私は明白な何かを見逃していますが、誰かが私に上記の行を説明できるなら、私はそれを感謝します。個人的には、私たちが実際に理解しているものを使用すれば、ずっと気分が良くなるでしょう。
変数e
は、double
型のn + 1
要素の配列へのポインターです。
e
で間接参照演算子を使用すると、e
の基本型が得られます。これは、「double
型のn + 1
要素の配列」です。
malloc
呼び出しは、基本型のe
(上記で説明)を取得してそのサイズを取得し、それにn + 1
を掛けて、そのサイズをmalloc
関数に渡します。基本的に、n + 1
の配列n + 1
の配列double
の要素を割り当てます。
これは、2D配列を動的に割り当てる典型的な方法です。
e
は、タイプ_double [n+1]
_の配列への配列ポインターです。sizeof(*e)
は、1つの_double [n+1]
_配列のサイズである、指摘された型の型を提供します。n+1
_にスペースを割り当てます。e
は、この配列の配列の最初の配列を指すように設定します。e
を_e[i][j]
_として使用して、2D配列の個々のアイテムにアクセスできます。個人的には、このスタイルは読みやすいと思います。
_double (*e)[n+1] = malloc( sizeof(double[n+1][n+1]) );
_