Ich habe gerade mit dem Lernen von C begonnen und ich habe einige einfache Programme mit MinGW für Windows ausgeführt, um zu verstehen, wie Zeiger funktionieren. Ich habe versucht, die folgenden:Direkte Zuordnung von Werten zu C-Zeigern
#include <stdio.h>
int main(){
int *ptr;
*ptr = 20;
printf("%d", *ptr);
return 0;
}
, die richtig kompiliert, aber wenn ich die ausführbare Datei ausführen funktioniert es nicht - der Wert nicht auf die Kommandozeile gedruckt wird, statt eine Fehlermeldung erhalten, dass die EXE-Datei, sagt funktioniert nicht mehr.
jedoch als ich versuchte, den Wert in eine Variable, und weisen int * ptr an die Speicheradresse der Variablen zu speichern, wie unten gezeigt:
#include <stdio.h>
int main(){
int *ptr;
int q = 50;
ptr = &q;
printf("%d", *ptr);
return 0;
}
es gut funktioniert.
Meine Frage ist, warum kann ich nicht direkt einen literalen Wert auf den Zeiger setzen? Ich habe Tutorials online nach Zeigern angeschaut und die meisten von ihnen machen es genauso wie das zweite Beispiel.
Jede Hilfe wird geschätzt.
Ursache dieser Zeiger ist nicht initialisiert - es kann auf so ziemlich überall zeigen und das Programm möglicherweise abstürzen. – Till
Sie hatten Glück, dass es mit einem Fehler beendet wurde. – JonnyRo
@JonnyRo hat Recht. In echtem Code führt diese Art von Bug dazu, dass entweder eine Woche lang Debugging-Sitzungen durchgeführt werden, um herauszufinden, warum sich eine andere Variable gelegentlich zufällig ändert (niemals, wenn Sie tatsächlich dafür testen, immer wenn Sie es tun) eine öffentliche Demonstration) oder Sicherheits-Exploits, bei denen jemand das Flag "is_admin" auf True setzt, indem er verschiedene Werte manipuliert. – abarnert