Comment les valeurs parasites sont assignées aux variables dans c

Code C:

int a; printf("\n\t %d",a); // It'll print some garbage value; 

Alors, comment ces valeurs parasites sont-elles affectées à des variables non initialisées derrière les rideaux en C?

Cela signifie-t-il que C alloue d’abord la mémoire à la variable ‘a’ et que tout ce qu’il y a à cet emplacement de la mémoire devient alors la valeur de ‘a’? ou autre chose?

Cela signifie-t-il que C alloue d’abord la mémoire à la variable ‘a’ et que tout ce qu’il y a à cet emplacement de la mémoire devient alors la valeur de ‘a’?

Exactement!

Fondamentalement, C ne fait rien à qui vous ne le dites pas. C’est à la fois sa force et sa faiblesse.

Cela signifie-t-il que C alloue d’abord la mémoire à la variable ‘a’ et que tout ce qu’il y a à cet emplacement de la mémoire devient alors la valeur de ‘a’? ou autre chose?

Correct. Il est à noter que “l’allocation” de variables automatiques telles que int a est pratiquement inexistante, puisque ces variables sont stockées sur la stack ou dans un registre de la CPU. Pour les variables stockées dans la stack, “l’allocation” est effectuée lorsque la fonction est appelée et se réduit à une instruction déplaçant le pointeur de la stack d’un décalage fixe calculé lors de la compilation (stockage combiné de toutes les variables locales utilisées par la fonction, arrondi à l’alignement approprié).

La valeur initiale des variables affectées aux registres de la CPU est le contenu précédent du registre. En raison de cette différence (registre et mémoire), il arrive parfois que des programmes qui ont fonctionné correctement lorsqu’ils ont été compilés sans optimisation commencent à se rompre lorsqu’ils ont été compilés avec l’optimisation activée. Les variables non initialisées, qui indiquaient précédemment l’emplacement initialisé à zéro, contiennent maintenant des valeurs provenant d’utilisations précédentes du même registre.

int a ;

Lors de la déclaration d’une variable, la mémoire est allouée. Mais cette variable n’est pas affectée, ce qui signifie que la variable a n’est pas initialisée. Si cette variable a est seulement déclarée mais n’est plus utilisée dans le programme, on appelle garbage value . Par exemple:

 int a, b; b=10; printf("%d",b); return 0; 

Ici, il est seulement déclaré, mais n’est plus assigné ni initialisé. Donc, cela s’appelle une valeur de déchets .

Initialement, la mémoire a certaines valeurs, c’est-à-dire des valeurs inconnues, également appelées valeurs parasites, lorsque nous déclarons une variable, de la mémoire était réservée à la variable en fonction du type de données spécifié lors de la déclaration. La valeur initiale de la mémoire est donc une valeur inconnue, si nous initialisons. une autre valeur alors notre valeur sera dans cet emplacement de mémoire.