私はプログラムでこの行を見たC.に新しいです:sizeof(int **)はどういう意味ですか?
grid = calloc(nx,sizeof(int**));
私はint**
がポインタへのポインタを意味しますが、何がsizeof(int**)
を意味していることを読んで?
私はプログラムでこの行を見たC.に新しいです:sizeof(int **)はどういう意味ですか?
grid = calloc(nx,sizeof(int**));
私はint**
がポインタへのポインタを意味しますが、何がsizeof(int**)
を意味していることを読んで?
sizeof(int **)
は、int *
の数がsizeof(int *)
の場合と同様に、int **
のバイト数を示します。彼らは間接的に異なるレベルを持っています。
sizeof
の式は、ポインタポインタを表すのに必要なバイト数だけです。int
です。おそらく、コードを書いた人は、そのようなポインタnx
を格納するのに十分なメモリを割り当てようとしています。
オペレータsizeof
演算子は、オペランドに必要な記憶領域のバイト数を返します。オペランドは、式またはカッコで囲まれた型のいずれかです。この場合、オペランドはタイプint **
であり、これは「int
へのポインタへのポインタ」です。 grid
を仮定
が
Nit: "* ..この場合、オペランドは 'int **'型です*実際には、その型としてサイズを取るべきですが、オペランドは '(int **)'です。 – alk
応答ありがとう! 'grid'は' int *** grid'として宣言すべきという結論にどうでしたか?この宣言が何を意味するのかを説明できるなら、本当に感謝します。あなたが正しいです、私はこの宣言を自分のコードで見つけました! – secluded
@secluded: 'malloc'または' calloc'を通して 'T '型のオブジェクトを動的に割り当てるときは常に、結果のポインタを' T * '型のオブジェクトに割り当てます。 'int'のブロックを割り当てると、その結果を' int * 'に代入します。 'int *'のブロックを割り当てると、その結果を 'int **'に代入します。そして 'int **'のブロックを割り当てると、その結果を 'int ***'に代入します。 –
として宣言されている[このようにタフでしたか?](https://en.wikipedia.org/wiki/Sizeof ) –
@ EOF私の日にエンターテインメントを追加していただきありがとうございます。 –
@EOF: "* ...はNULLがビット単位でゼロでなければならないと仮定しています。*"あなたはこれを締結していますか?私は何が欠けていますか? :-S – alk