consideri il programmaoperatore sizeof() in C
main()
{
printf("%d %d %d",sizeof('3'),sizeof("3"),sizeof(3));
}
uscita da un compilatore gcc è:
4 2 4
Perché è così?
consideri il programmaoperatore sizeof() in C
main()
{
printf("%d %d %d",sizeof('3'),sizeof("3"),sizeof(3));
}
uscita da un compilatore gcc è:
4 2 4
Perché è così?
si Supponendo che sono in esecuzione su un sistema a 32 bit:
sizeof un carattere letterale '3' è 4 perché letterali di carattere sono interi in linguaggio C (ma non C++).
sizeof "3" è 2 perché è un array letterale con lunghezza 2 (numero 3 più terminatore NULL).
sizeof letteral 3 è 4 perché è un int.
Le risposte a questa domanda aiutano a spiegarne altre - http://stackoverflow.com/questions/2252033/in-c-why-is-sizeofchar-1-when-a-is-an-int –
Perché '3' un intero? – Mohit
In C, i valori letterali di char sono di tipo int. Non così con C++. –
sizeof() La produttività dipende compilatore si utilizza
Alcuni punti da tenere a mente:
sizeof
non è una funzione, è un operatore. Restituisce la dimensione di un tipo in unità di sizeof char
. In altre parole sizeof char
è sempre 1.int
char[2]
, il carattere 3 poi il terminatore nullo.int
Con queste differenze sono facilmente spiegabili:
int
richiede 4 char
s di spazio per tenerlochar[2]
naturalmente richiede solo 2 char
s+1 per aver menzionato 'sizeof' è un operatore. Pet peeve mine: le parentesi in 'sizeof (char)' appartengono al tipo (dove sono necessarie). Possono (e dovrebbero) essere omessi in 'sizeof '3''. – schot
Per quotare K & R,
Ogni compilatore è libero di scegliere dimensione appropriata per il proprio hardware, soggetto soltanto alla il restrizione che pantaloncini e int sono almeno 16 bit, long sono almeno 32 bit, e breve non è più di int, che non è più lungo.
controllare per sizeof (int) e sizeof (char) e sizeof (char *) – Vijay
'sizeof' non è una funzione ma un operatore. –
tasto @benjamin: l'ordine diverso corrisponde alla domanda dell'OP :) – akira