Saya perhatikan ada yang aneh setelah kompilasi kode ini di komputer saya:
#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;
}
Hasilnya adalah sebagai berikut. Perhatikan bahwa antara setiap alamat int ada perbedaan 4-byte. Namun antara int terakhir dan int panjang ada perbedaan 12 byte:
Hello, World!
The addresses are:
da54dcac
da54dca8
da54dca4
da54dca0
da54dc9c
da54dc98
da54dc94
da54dc88
sizeoffungsi untuk itu. printf("size: %d ", sizeof(long));
%x. Beruntung bagi Anda, itu terjadi untuk bekerja dengan benar pada platform Anda untuk melewatkan pointer pointer dengan format string yang diharapkan unsigned int, tetapi pointer dan int adalah ukuran yang berbeda di banyak ABI. Gunakan %puntuk mencetak petunjuk dalam kode portabel. (Sangat mudah untuk membayangkan suatu sistem di mana kode Anda akan mencetak bagian atas / bawah dari 4 petunjuk pertama, bukan setengah dari semua 8.)
%zu . @yoyo_fun untuk mencetak alamat yang digunakan%p . Menggunakan format specifier yang salah memunculkan perilaku yang tidak terdefinisi
intsetelahhdalam kode sumber. Compiler mungkin meletakkannya di celah, sebelumnyah.