Que se passe t-il ici? sizeof (short_int_variable + char_variable)

#include  int main() { short int i = 20; char c = 97; printf("%d, %d, %d\n", sizeof(i), sizeof(c), sizeof(c + i)); return 0; } 

Quelqu’un pourrait-il me dire ce qui se passe lorsque sizeof (a + b) “a est de type entier & b est de type caractère” La sortie est: 2, 1, 4

En raison des règles de promotion intégrale standard de C, le type de l’expression c + i est int , c’est pourquoi vous obtenez l’équivalent de sizeof (int) .

Notez que sizeof n’est pas une fonction, les parenthèses ne sont nécessaires que pour nommer un type et pour résoudre les conflits de précédence . Votre code pourrait être écrit:

 printf("%zu, %zu, %zu\n", sizeof i, sizeof c, sizeof (c + i)); 

L’utilisation finale de sizeof a des parenthèses puisque sizeof plus étroit que + , en disant que sizeof c + i serait analysé comme (sizeof c) + i ce qui n’est pas le résultat souhaité.

Notez également que c’est une construction au moment de la compilation, l’expression n’est jamais réellement évaluée. Tout ce qui se passe, c’est que le compilateur “prétend” l’évaluer, déterminer le type de l’expression, puis vous donne la taille d’une valeur de ce type. La valeur réelle n’a jamais besoin d’exister, ce qui est parfois soigné.

Le type de la valeur renvoyée par sizeof est size_t , qui est imprimé avec %zu (ce n’est pas int ).

 1) sizeof(i) ==> sizeof(short int) = 2 2) sizeof(c) ==> sizeof(char) = 1 3) sizeof(c + i [97+20]) ==> sizeof(int) = 4 // result in constant value which is int as default 

Comme d’autres l’ont dit, sizeof est calculé au moment de la compilation.

Ici, la valeur de l’expression c + i entier, comme c et i sont promus (promotion intégrale) en int et donc

 sizeof( c + i ) 

vous donne 4 octets sur une machine 32 bits ..

sizeof ne fonctionne qu’à la compilation pour obtenir la taille d’une expression.

Ce qui suit n’augmentera pas réellement ‘c’:

c = taillede (++ c);

L’expression sizeof (a + b) renverra le plus grand type avec unsigned ayant la priorité

Le type de données de a est “short int”. -32768 ~ +32767

Le type de données de c est “char”. 0 ~ 255

Lorsque vous ajoutez a à c ce n’est ni un court int ni un caractère, il devient int !

Voici un exemple de code qui vous aidera à obtenir le type de données variable:

 #include  int main() { short int a = 1; char c = 'A'; std::cout << typeid(a + c).name() << std::endl; return 1; }