1

たとえば、私は

char* c=(char *)malloc(100*sizeof(char));
printf("0x%x,c);
printf("0x%x,&c);

cこれはとの異なる値を示します&c

ただし、次の場合:

char d[100];
printf("0x%x,d);
printf("0x%x,&d);

これは、 と の値が同じであることを示していdます&d

c最初のコードでとの結果が異なるのは&cなぜですか?

4

1 に答える 1

6

配列は、関数呼び出しでの使用を含め、多くのコンテキストで最初の要素へのポインターに崩壊します。単項(address-of) 演算子のオペランドの場合は減衰しません&つまり、例では同じアドレス dを生成しますが、タイプは異なります。と、それぞれ、あなたの場合。&dchar *char (*)[100]

対照的にc、ポインタです。でアドレスを取得すると、直接 &使用するのとは対照的に、ポインター変数のアドレスを取得しているため、ポインター変数が指しているアドレスが得られます。は であり、です。ccchar *&cchar **

編集上の注記:%pポインター型を出力するために使用します。 %xは 用でありunsigned intunsigned intポインターとはサイズが異なる場合があります。修正されたコードは次のようになります。

printf("%p\n", (void *)c);
于 2013-07-15T17:34:43.823 に答える