- ベストアンサー
ポインタへの代入
int main() {int *i =0xffffffff; printf("&p...%p",&p); return 0;} としてiにffffffffのアドレスを代入しても別のアドレスが表示されます。なぜでしょうか。
- みんなの回答 (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)は同じ値になる。
その他の回答 (1)
- bluecampus
- ベストアンサー率66% (138/209)
回答No.1
>printf("&p...%p",&p); pという変数はないけど? iの値を表示するなら、&をつけずに printf("i...%p", i); とします。 (厳密には、printf("i...%p", (void*)i); とキャストすべき)
質問者
お礼
回答ありがとうございます。おっしゃるとおりpではなくiですね。 しかし、僕の手持ちの参考書「やさしいC」ではたとえば int a; a =5; printf("変数aのアドレスは%pです。\n",&a); のように%pは&aと対になってもちいられているのですが、今回のケースのようにアドレスを直接ポインタに指定した場合はなぜ&がいらないのでしょうか。
お礼
回答ありがとうございます。短いコードですが、僕の疑問の本質をとらえていますね。納得しました。