私のマシンでこのコードをコンパイルした後、奇妙なことに気付きました:
#include <stdio.h>
int main()
{
printf("Hello, World!\n");
int a,b,c,d;
int e,f,g;
long int h;
printf("The addresses are:\n %0x \n %0x \n %0x \n %0x \n %0x \n %0x \n %0x \n %0x",
&a,&b,&c,&d,&e,&f,&g,&h);
return 0;
}
結果は次のとおりです。すべてのintアドレスの間に4バイトの違いがあることに注意してください。ただし、最後のintとlong intの間には、12バイトの違いがあります。
Hello, World!
The addresses are:
da54dcac
da54dca8
da54dca4
da54dca0
da54dc9c
da54dc98
da54dc94
da54dc88
sizeof
機能があります。printf("size: %d ", sizeof(long));
%x
。幸運なことに、プラットフォームで正しく動作してunsigned int
、期待するフォーマット文字列でポインタ引数を渡しますが、多くのABIではポインタとintのサイズが異なります。%p
ポータブルコードでポインターを印刷するために使用します。(コードが、8つすべての下半分ではなく、最初の4つのポインターの上半分と下半分を印刷するシステムを想像するのは簡単です。)
int
後h
に置きます。コンパイラは、前に、ギャップにそれを置くことができh
ます。