質問するログイン新規登録

回答編集履歴

2

修正

2016/11/24 09:40

投稿

hiim
hiim

スコア1689

answer CHANGED
@@ -2,7 +2,7 @@
2
2
  ```
3
3
  printf("データ:%d , アドレス:%p\n", *p, p);
4
4
  ```
5
- ポインターとunsigned intがいつも同じ大きさとは保障されないので、%pのかわりに%dや%xを使う事は良くないです。
5
+ ポインターとintがいつも同じ大きさとは保障されないので、%pのかわりに%dや%xを使う事は良くないです。
6
6
  私もOSXのため以下を試した結果
7
7
 
8
8
  ```
@@ -15,10 +15,9 @@
15
15
  データ:25 , アドレス:1459682028
16
16
  データ:25 , アドレス:5700faec
17
17
  データ:25 , アドレス:0x7fff5700faec
18
-
19
18
  ```
20
19
  となりアドレスの半分しか表示できませんね。。。。
21
-
20
+ (ポインターとシステムのintなどのサイズが異なるとアドレスの半分しか表示されない)
22
21
  といういう事[らしい](http://stackoverflow.com/questions/2369541/where-is-p-useful-with-printf)です
23
22
 
24
23
  ###追記

1

追記

2016/11/24 09:40

投稿

hiim
hiim

スコア1689

answer CHANGED
@@ -19,4 +19,11 @@
19
19
  ```
20
20
  となりアドレスの半分しか表示できませんね。。。。
21
21
 
22
- といういう事[らしい](http://stackoverflow.com/questions/2369541/where-is-p-useful-with-printf)です
22
+ といういう事[らしい](http://stackoverflow.com/questions/2369541/where-is-p-useful-with-printf)です
23
+
24
+ ###追記
25
+ 64bitでのアドレス空間のユーザー空間は
26
+
27
+ [0x0000000000000000~0x00007fffffffffff](http://wiki.bit-hive.com/linuxkernelmemo/pg/64bit%A4%C7%A4%CE%A5%A2%A5%C9%A5%EC%A5%B9%B6%F5%B4%D6)
28
+
29
+ という事で%pの出力はその範囲を正しく表せますが%x(%d)は表せてないですね。。。