“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.