J’ai essayé d’exécuter le programme suivant en C et j’ai obtenu quelques résultats. Pouvez-vous m’aider pourquoi ???
#include int main() { char x='A'; printf("%d%d%d",sizeof("3"),sizeof('3'),sizeof(3)); return 0; }
La sortie reçue est 2 4 4 en utilisant gcc dans ubuntu 11.04 32 bits.
De même dans un autre programme: –
#include int main() { char x='A'; printf("%d%d",sizeof('A'),sizeof(x)); return 0; }
La sortie reçue est 4 1 en utilisant GCC dans Ubuntu 11.04 32 bits.
Pouvez-vous m’aider pourquoi la sortie est de cette façon ???
En C, les littéraux de caractères sont de type entier, donc sizeof('3') == sizeof(int)
. Voir cette FAQ C pour plus de détails.
C’est l’un des domaines où C et C ++ diffèrent (en C ++, sizeof('3')
vaut 1
).
En fait, en corrigeant mon assertion précédente, sizeof("3")
donnera 2 parce que “3” est traité comme un tableau de caractères à 2 éléments.
6.3.2.1/3
Sauf s’il s’agit de l’opérande de l’opérateur sizeof ou de l’ opérateur unaire &, ou s’il s’agit d’ un littéral utilisé pour initialiser un tableau, une expression de type ” tableau de type ” est convertie en une expression de type ” pointeur sur type ” qui pointe sur l’élément initial de l’object tableau et n’est pas une valeur.
En C
3
: littéral entier, type int
'3'
: caractère littéral, type int
"3"
: littéral de chaîne: type char[2]
Dans votre deuxième exemple, x
désigne un object de type char
.
Le ‘3’ est converti en type int, qui est de 4 octets. Cependant “3” est une chaîne de deux octets. Le premier octet est le caractère 3 et le second est le terminateur nul qui est ajouté à toutes les chaînes.
“C” est
char myssortingng[2]; myssortingng[0] = 'C'; myssortingng[1] = '\0';
Alors que ‘C’ est
int mychar; mychar = 'C';
'3'
est une constante de caractère. En C, les constantes de caractère ont le type int
(en C ++, elles ont le type char
). Ainsi, sizeof '3'
== sizeof (int)
.
"3"
est un littéral de chaîne. C’est un tableau de char
2 éléments ( const char
en C ++) avec les valeurs {'3', '\0'}
. sizeof (char)
== 1 par définition, donc sizeof "3"
== 2.
3
est une constante entière. Il a le type int
. Ainsi, sizeof 3
== sizeof (int)
.
La variable x
est déclarée en tant que caractère, donc sizeof x
== 1.