Ich versuche, auf Elemente in einem Array von Strukturen zuzugreifen und die Strukturfelder wie folgt zu drucken
printList(Album *a, int numOfStructs)
{
int i;
int j;
for(i = 0; i < numOfStructs; i++)
{
printf("number%d\n:", i+1);
printf("%s", a[i]->field2);
printf("%s", a[i]->field2);
printf("%d", a[i]->field3);
for(j = 0; j < a[i]->numOfStrings; j++)
{
printf("%s", a[i]->strings[j]);
}
printf("\n");
}
}
aber ich bekomme jede Menge Fehler als solche
ungültiges Typargument von ‘->’
Was mache ich falsch mit diesem Zeiger?
a ist vom Typ Album* was bedeutet, dass a[i] ist vom Typ Album (es ist der ites Element im Array von Album Objekt, auf das gezeigt wird a).
Der linke Operand von -> muss ein Zeiger sein; das . Operator wird verwendet, wenn es sich nicht um einen Zeiger handelt.
Sie müssen die verwenden . Operator. Sie sehen, wenn Sie a anwenden * auf einen Zeiger dereferenzieren Sie ihn. Dasselbe gilt für die []. Der Unterschied zwischen * und [] ist, dass die Klammern einen Offset vom Zeiger erfordern, der zur Adresse im Zeiger hinzugefügt wird, bevor er dereferenziert wird. Grundsätzlich sind diese Ausdrücke identisch:
Um zu deiner Frage zu kommen: Ändern a[i]->field2 und a[i]->field3 zu a[i].field2 und a[i].field3.
Vielen Dank. verschiedene Teile meines Programms brauchen -> und andere brauchen . ? Ich habe gerade mit C angefangen und sobald ich glaube, Zeiger zu verstehen, merke ich, dass ich keine Ahnung habe. 🙁 Wenn ich die folgenden fgets(&(tempAlbum->field1),MAXCHARACTERS, stdin) versuche, erhalte ich eine Warnung: Übergeben von Argument 1 von „fgets“ von einem inkompatiblen Zeigertyp
– some_id
13. Februar 2011 um 7:57 Uhr
13831900cookie-checkUngültiges Typargument von -> C-Strukturenyes