Mit folgendem CodeWarum gcc nicht 0 consistenly
#include <stdio.h>
int main() {
int num;
printf("%d\n", num);
int* num2;
printf("%p\n", &num2);
return 0;
}
nach einer Erklärung int gedruckt wurde bekam ich zur Folge haben wie:
Von Memory allocation for global and local variables, ich die globale Variable kennen num
wird implizit auf 0
initialisiert, sogar wird es von mir nicht initialisiert.
Jetzt bin ich gerade etwas zufällig versucht, so dass ich ändern Sie den Code zu
#include <stdio.h>
int main() {
int num;
printf("%d\n", num);
int* num2;
printf("%p\n", num2);
return 0;
}
und jetzt bekomme ich
Frage: Ich weiß nicht, warum der Wert von num
ist nicht mehr 0
.
Meiner Meinung nach, was ich mache mit der Variablen num2
und ihren Wert hat NICHTS MIT der Variablen num
zu tun.
Ich bin nicht nur daran interessiert, warum, sondern möchte auch Ihre Meinungen über dieses Verhalten zu hören.
'Das Lesen von Werten nicht initialisierter Variablen ist ein nicht definiertes Verhalten.' Nein; Nur wenn sie Trap-Repräsentationen enthalten können, z. B. Floats. Sie könnten jedoch undefinierte * Ergebnisse * erhalten. – wildplasser
@wildplasser hm Ich denke auf SO lesen Werte von nicht initialisierten Variablen wird allgemein als UB bezeichnet: http://stackoverflow.com/documentation/c/364/undefined-behavior/2576/reading-an-uninitialized-object-that-is -nicht-backed-by-memory # t = 201608101257444574981 –
Dereferenzieren eines Zeigers! = Lesen einer Variablen. – wildplasser