0
#include <stdio.h>
int main(void)
{
  int *ptr;
  printf("The Hex value of ptr is 0x%x",ptr);
  printf("The pointer value of ptr is %p",ptr);
}

出力が少し違うので理由がわかりません

The Hex value of ptr is 0x24a77950
The pointer value of ptr is 0x7fff24a77950

ptrの値が16進整数であることを示していますが、16進出力には部分がありません7fff

これはprintfフォーマットの問題ですか、それとも他の問題ですか?

4

1 に答える 1

5

%x は、ポインターを符号なし整数 (32 ビット長) にキャストします。64 ビット マシンでは、ポインターの長さは 8 バイト (64 ビット) です。

%p で印刷すると、ポインター全体が完全なサイズ (64 ビット) で印刷されます。ただし、%x で印刷する場合は、下位 32 ビットのみが印刷されます。したがって、%p でポインターを出力することは常に安全です。

以下のように 2 行追加して確認できます。

printf("size of unsigned int is %lu\n", sizeof(unsigned int));
printf("size of pointer is %lu\n", sizeof(int *));

64 ビット オペレーティング システムを搭載した 64 ビット マシンでは、それぞれ 4 と 8 になります。

回答済みの 2 つの同様の質問を参照してください:質問 1質問 2

于 2012-07-16T14:42:34.873 に答える