Résultat de Printf (“% d”, & a)

J’ai un code en C

int a; a =10; printf ("%d", &a); 

Je veux savoir si des ordures seront imprimées ou si un message d’erreur sera affiché. En gros, je voudrais savoir comment fonctionne printf. At-il une liste de variables dans un tableau? Si une table est là d’où il prendra la valeur de & a

Ceci est une question pour les débutants et mérite d’être répondu correctement. (Je suis surpris par les votes négatifs et les commentaires non constructifs)

Permettez-moi de vous présenter ligne par ligne:

 int a; 

La première ligne déclare une variable avec le nom a . La variable est de type integer et avec les compilateurs normaux (Microsoft Visual C ++ sous Windows, GCC sous Linux, Clang sous Mac), cette largeur est généralement de 32 bits. La variable entière est signée parce que vous n’avez pas spécifié non signé. Cela signifie qu’il peut représenter des valeurs allant de –2 147 483 648 à 2 147 483 647.

 a =10; 

La deuxième ligne atsortingbue la valeur 10 à cette variable

 printf ("%d", &a); 

La troisième ligne est l’endroit où vous obtenez le résultat surprenant. "%d" est la “chaîne de formatage” qui définit comment les variables, données sous forme d’arguments supplémentaires, sont formatées puis imprimées. La chaîne de format comprend du texte normal (qui sera imprimé normalement) et des séquences de contrôle. les séquences de contrôle commencent par le caractère % et se terminent par une lettre. La lettre spécifie le type d’argument attendu. d dans le cas ci-dessus attend une valeur entière.

Le problème avec votre code est que vous ne spécifiez pas de valeur itenger, vous donnez l’adresse d’une valeur entière (avec l’adresse-of & opérateur). La déclaration correcte serait:

 printf ("%d", a); 

Simple.

Je vous recommande de lire un bon livre C. Je recommande “Le langage de programmation C”, qui provient des auteurs originaux du langage. Vous trouvez ce livre sur amazon , mais vous le trouvez également en ligne .

Vous pouvez trouver les mêmes réponses en lisant dans la norme. Mais pour être honnête, ces documents ne sont pas faciles à lire. Vous pouvez trouver un projet de norme C11 ici . La description des options de formatage commence à la page 309. (les brouillons suffisent généralement pour la programmation et sont généralement disponibles gratuitement).

C’est un comportement indéfini .

Si vous êtes nouveau sur C, cela peut être une surprise. Cependant, la spécification C définit le comportement de certains programmes (appelés “programmes corrects”). Si vous ne suivez pas les règles de la spécification, votre programme n’est pas correct et, littéralement, tout peut arriver. Le lien ci-dessus va plus en détail.

Votre programme ne suit pas les règles car le spécificateur de format %d pour printf doit avoir un argument correspondant de type int (après les promotions d’argument par défaut), mais vous transmettez plutôt un argument de type int * .

Comme il s’agit d’un comportement indéfini, le résultat n’a pas de sens et il n’est généralement pas intéressant d’enquêter.

Cela affichera l’adresse de la variable ‘a’. Rappelez-vous que l’opérateur & renvoie l’adresse de l’opérande.