1

次のコードセットがあります

int main(){
   int x = 36;
   int const * p1;
   p1 = &x;

   printf("Values at p1: %d\n", *p1); 
   p1=0;

   printf("Addresses pointed to by p1: %p ", &p1); 
   return 0;
}

与える

Addresses pointed to by p1 gives 0028FF480

   int main(){
   int x = 36;
   int const * p1;
   p1 = &x;

   printf("Values at p1: %d\n", *p1); 
   p1=0;

   printf("Addresses pointed to by p1: %p ", p1); 
   return 0;
   }

p1 が指すアドレスは 00000000 を与える

どうしてこんなに違うんだろう..?どちらも同じ価値があると思っていました。

4

3 に答える 3

1

両者は異なるため、出力に違いがあります。

p1ポインタが指す変数のアドレスを返します。

&p1ポインタp1自体がメモリに格納されているアドレスを返します。

于 2011-12-27T11:35:53.923 に答える
1

( で取得した) のアドレスを最初p1に格納します。後で、null アドレスを格納するように設定します。x&xp1

最初のスニペットでは、 に保存されているアドレスでp1はなく、それ自体のアドレスを 出力することにしました。は他の変数と同様に変数であり、残りの変数と同様に、その変数のアドレスが表示されます。これは、そこに格納されている値とは異なります。これは でアクセスでき、2 番目のスニペットが出力するものです。p1 p1&p1p1

写真が好き

他の変数と同様に、変数のアドレスを変更することはできません。変数p1に格納されている値のみを変更できます。ポインターの場合は、値がアドレスになります。

于 2011-12-27T12:29:13.110 に答える
0
p1=0;

「p1」を指すポインターをゼロに設定します。これは、その内容ではなく、

*p1=0;
于 2011-12-27T11:34:23.907 に答える