• ベストアンサー

ポインタへの代入

int main() {int *i =0xffffffff; printf("&p...%p",&p); return 0;} としてiにffffffffのアドレスを代入しても別のアドレスが表示されます。なぜでしょうか。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

&をつけるとポインタを射すことになるので、 もともとint型のポインタを射す変数であるiに&をつけると、 int型のポインタのポインタを射すことになってしまうので、要りません。 int x = 0; int* y = &x; printf("xのポインタの値 : %p\n", &x); /* ・・・(A) */ printf("yの値      : %p\n", y); /* ・・・(B) */ printf("yのポインタの値 : %p\n", &y); /* ・・・(C) */ (A)と(B)は同じ値になる。

szatmari
質問者

お礼

回答ありがとうございます。短いコードですが、僕の疑問の本質をとらえていますね。納得しました。

その他の回答 (1)

回答No.1

>printf("&p...%p",&p); pという変数はないけど? iの値を表示するなら、&をつけずに printf("i...%p", i); とします。 (厳密には、printf("i...%p", (void*)i); とキャストすべき)

szatmari
質問者

お礼

回答ありがとうございます。おっしゃるとおりpではなくiですね。 しかし、僕の手持ちの参考書「やさしいC」ではたとえば int a; a =5; printf("変数aのアドレスは%pです。\n",&a); のように%pは&aと対になってもちいられているのですが、今回のケースのようにアドレスを直接ポインタに指定した場合はなぜ&がいらないのでしょうか。

関連するQ&A