Opérateur sizeof () en C

Considérez le programme

main() { printf("%d %d %d",sizeof('3'),sizeof("3"),sizeof(3)); } 

la sortie d’un compilateur gcc est:

 4 2 4 

Pourquoi est-ce?

En supposant que vous utilisez un système 32 bits:

sizeof un caractère littéral ‘3’ est égal à 4 car les littéraux de caractères sont contenus dans le langage C (mais pas C ++).

sizeof “3” vaut 2 car il s’agit d’un littéral de tableau de longueur 2 (chiffre 3 plus terminateur NULL).

sizeof littéral 3 est 4 parce que c’est un int.

Quelques points à garder à l’esprit:

  1. sizeof n’est pas une fonction, c’est un opérateur. Il retourne la taille d’un type en unités de sizeof char . En d’autres termes, sizeof char est toujours 1.
  2. ‘3’ est un int
  3. “3” est un caractère char[2] , le caractère 3 puis le terminateur nul.
  4. 3 est un int

Avec ces dernières, les différences s’expliquent facilement:

  1. un int nécessite 4 caractères d’espace pour le contenir
  2. char[2] ne nécessite naturellement que 2 caractères

Pour citer K & R,

Chaque compilateur est libre de choisir les tailles appropriées pour son propre matériel, sous réserve uniquement de la ressortingction voulant que les courts-circuits et les ints soient d’au moins 16 bits, les longs de 32 bits et que short ne dépasse pas int, qui ne dépasse .

sizeof () La sortie dépend du compilateur que vous utilisez