ここでの「問題」は、コンパイル アーキテクチャに依存する結果です。
C の基本型 ( int、double、 などchar) には事前定義されたサイズがありません。どのサイズをどの型に使用するかはコンパイラ次第です。
ポインターに関しては、通常、マシンで使用可能な任意のメモリ位置をアドレス指定できるようにする必要があります。32 ビット アーキテクチャでは、アドレス範囲は 2^32 です。ポインタは、メモリが配置されているアドレスを参照する数値にすぎないため、2^32 アドレス (つまり、4 バイトの範囲) が適切です。
64 ビット システムの場合、すべてのメモリをアドレス指定するには、2^64 (つまり 8 バイト) の範囲が必要です。
したがって、ポインタのサイズはシステム アーキテクチャに依存する必要があります。
心に留めておいてください:すべてのポインタ型(それであろうとint*, char*, double*何であろうと)は同じサイズです!そのため、32 ビットで整数と整数ポインタを使用すると、intほとんどのアーキテクチャでも 4 バイトのサイズがあるため、少し混乱する可能性があります。