3
int y=1;
int k=2; 
int *p1; 
int *p2; 
p1=&y;
p2=&k;
p1=p2;
*p1=3;
*p2=4;
printf("%d",y);

出力が1になっています。誰かが理由を説明してくれませんか!! 4になると予想していました。

4

5 に答える 5

4

以下のコメントは、これがどのように機能するかを説明しています。

int y=1;
int k=2; 
int *p1; 
int *p2; 
p1=&y; //pointer p1 holds the address of y
p2=&k; //pointer p2 holds the address of k
p1=p2; //pointer p1 now holds the address which p2 holds, which is the address of k
*p1=3; //the value which p1 points to is now 3 (so k equals 3 as well)
*p2=4; //the value which p2 points to is now 4 (so k equals 4 as well)
printf("%d",y); //y is still 1

ただしprintf("%d",k);、値 4 を実行すると、出力されます

于 2013-07-05T20:50:20.843 に答える
2

これを簡単にするために、 と&y=3としましょう&k=4

int y=1;
int k=2; 
int *p1; 
int *p2; 
p1=&y;  // p1=3
p2=&k;  // p2=4
p1=p2;  // p1=4
*p1=3;  // p1=4 so k becomes 3
*p2=4;  // p2=4 so k becomes 4
printf("%d",y); // we get 1 because y was never changed
于 2013-07-05T20:44:09.980 に答える
1

あなたがするとき:

p1=p2;

基本的に、変数 k のアドレスを p2 から p1 にコピーしています。したがって、そのステップの後、両方のポインターが変数 k を指しているため、p1 または p2 のいずれかを逆参照すると、y ではなく変数 k の値が実際に変更されます。

あなたがするとき:

*p1 = 3;

変数 k に 3 を代入しています。次に、次のことを行います。

*p2 = 4;

変数 k に 4 を再度代入しています。そのため、y は変更されず、印刷すると 1 になります。

于 2013-07-05T20:42:58.697 に答える
1

このステートメントはvariable を指すようにp1=p2;設定します。したがって、次の両方の割り当て:p1k

*p1=3;  
*p2=4;

variable のみに影響するkため、y1 のままです。

于 2013-07-05T20:45:41.770 に答える
0

どうやって 4 にたどり着いたかを聞きたいのですが、p1 には y へのアドレス (つまりポインタ) が割り当てられますが、2 行後には k のアドレスに置き換えられます。したがって、p1 も p2 も y を指していないため、y は変化しません。

于 2013-07-05T20:43:37.437 に答える