“Int * nums = {5, 2, 1, 4}” verursacht einen Segmentierungsfehler

int *nums = {5, 2, 1, 4};
printf("%d\n", nums[0]);

verursacht einen Segfault, während

int nums[] = {5, 2, 1, 4};
printf("%d\n", nums[0]);

nicht. Jetzt

int *nums = {5, 2, 1, 4};
printf("%d\n", nums);

prints 5.

uf dieser Grundlage habe ich vermutet, dass die Array-Initialisierungsnotation {} diese Daten blind in eine beliebige Variable auf der linken Seite lädt. Wenn es int [] ist, wird das Array wie gewünscht gefüllt. Wenn es int * ist, ist der Zeiger mit 5 gefüllt, und die Speicherstellen, nach denen der Zeiger gespeichert ist, sind mit 2, 1 und 4 gefüllt. So versucht nums [0], 5 zu deref, was einen Segfault verursacht.

Wenn ich falsch liege, korrigieren Sie mich bitte. Und wenn ich richtig liege, erläutern Sie dies bitte, da ich nicht verstehe, warum Array-Initialisierer so funktionieren, wie sie es tun.

Antworten auf die Frage(10)

Ihre Antwort auf die Frage