Bu kodu makinemde derledikten sonra garip bir şey farkettim:
#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;
}
Sonuç şudur. Her int adresi arasında 4 baytlık bir fark olduğuna dikkat edin. Ancak son int ile long int arasında 12 baytlık bir fark vardır:
Hello, World!
The addresses are:
da54dcac
da54dca8
da54dca4
da54dca0
da54dc9c
da54dc98
da54dc94
da54dc88
sizeof
işlevi var. printf("size: %d ", sizeof(long));
%x
. Şanslısınız ki, beklediğiniz biçim dizgisine sahip işaretçi argümanlarını iletmek platformunuzda doğru bir şekilde çalışıyor unsigned int
, ancak işaretçiler ve girişler birçok ABI'de farklı boyutlarda. %p
İşaretçileri taşınabilir kodda yazdırmak için kullanın . (Kodunuzun, ilk 8 göstergenin üst / alt yarısına yazdırılacağı bir sistemi hayal etmek kolaydır. 8'in yarısı yerine 8)
%zu
chrisSchneider kullanın . @yoyo_fun adresleri yazdırmak için kullanın%p
. Yanlış Biçim belirteci kullanarak çağırır tanımsız davranış
int
sonrah
kaynak kodunda. Derleyici daha önce boşluğa koyabilirh
.