Ho notato qualcosa di strano dopo aver compilato questo codice sulla mia macchina:
#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;
}
Il risultato è il seguente. Si noti che tra ogni indirizzo int esiste una differenza di 4 byte. Tuttavia tra l'ultimo int e il lungo int c'è una differenza di 12 byte:
Hello, World!
The addresses are:
da54dcac
da54dca8
da54dca4
da54dca0
da54dc9c
da54dc98
da54dc94
da54dc88
sizeof
funzione per questo. printf("size: %d ", sizeof(long));
%x
. Fortunatamente per te, sembra funzionare correttamente sulla tua piattaforma per passare argomenti di puntatore con una stringa di formato in attesa unsigned int
, ma puntatori e ints hanno dimensioni diverse in molte ABI. Utilizzare %p
per stampare puntatori in codice portatile. (È facile immaginare un sistema in cui il tuo codice stamperebbe la metà superiore / inferiore dei primi 4 puntatori, invece della metà inferiore di tutti gli 8.)
%zu
. @yoyo_fun per stampare gli indirizzi utilizzare%p
. L'uso
int
dopoh
nel codice sorgente. Il compilatore potrebbe metterlo nel gap, primah
.