0

のメモリ割り当て(ある場合)は何ですか?また、書き込み時のメモリ割り当てはどこにありpます*pか?**pchar **p = NULL

4

3 に答える 3

4

のサイズはpその種類によって異なります。*pand **p(and ***p、など) のサイズ**********pは、ポインターのサイズです。通常、32 ビット システムと 64 ビット システムのどちらを使用しているかに応じて、4 バイトまたは 8 バイトです。

あなたが書くとき、あなたはあなたに与えるchar **p = NULLものを超えて追加のメモリを割り当てていません。char **pメモリ内の変数の場所を初期化せずにそのままにするのではなく、値で初期化しているだけです。

それらがどこにあるかについては、文脈によって異なります。それらが関数内のローカル変数である場合、関数が呼び出されたときにスタックに割り当てられます。グローバル変数の場合、プログラムのデータ セグメント内の場所が与えられます。それらが a のメンバーである場合struct、構造型の変数を宣言する場所によって異なります。

于 2012-09-25T06:28:02.343 に答える
1

静的/グローバルでない場合、変数はスタックに格納されます。ここにはヒープメモリの割り当てはありません。それは単なる(無効な)メモリアドレスです。

于 2012-09-25T06:17:10.103 に答える
0

を記述するとchar **p = NULL;pローカル変数 (ほとんどの場合、関数内で定義されている場合はスタック上) またはグローバル変数 (ほとんどの場合、スタック上でもヒープ上でもありません (どこからmalloc()メモリが割り当てられるか) )、すべての関数の外で定義されている場合)。

*pNULL ポインターを合法的に逆参照できないため、 の場所は未定義です。

**p最初に逆参照する必要があるため、同じことが当てはまりますpが、これは違法です。

等々。

于 2012-09-25T12:12:53.743 に答える