• ベストアンサー

%P と %X の違い

アドレスを表示させるときの、%p は、%x と同じ16進数で表示される んでしょうか? 表示の違いと言えば、大文字か小文字の違いだけなんでしょうか? 16進数の大大文字は「%X」というふうに、Xを大文字で指定すれば、 結果も大文字で表示されますよね。 %pはどういった意味なんでしょうか? #include <stdio.h> main() { char a; short b; printf("bのアドレスは%d,%p,%x\n", &b, &b, &b); return 0; }

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

  • ベストアンサー
  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

およそ #1 の通りで, アドレス値を出力するためには %p を使わなければなりません. %x は unsigned int を 16進で出力するという指定であり, アドレス値を出力するときに %x を使ってはいけません. 処理系によっては動いてしまうこともありますが正しいプログラムではありません.

noname#114571
質問者

お礼

お返事ありがとうございました。 %pが正しいようですね。 これからは%pを。 ありがとうございました。

その他の回答 (1)

  • nitscape
  • ベストアンサー率30% (275/909)
回答No.1

型が違うのだと思います。 %xはint、%pはvoid*だと思います。 そのため質問文のコードではコンパイラによっては型不一致のワーニングがでるかもしれません。 printf("bのアドレスは%d,%p,%x\n", (int)&b, (void*)&b, (int)&b); のようになるのではないでしょうか?

関連するQ&A