Pointer-Struct-Scanf Verständnisfrage
-
moin
ich hab folgenden Code in einem Tutorial gefunden:
#include <stdio.h> struct daten { float betrag; char vname[30]; char nname[30]; } rec; void ausgabe(struct daten x); int main(void) { printf("Geben Sie den Vor- und Nachnamen des Spenders,\n"); printf("getrennt durch ein Leerzeichen, ein: "); scanf("%s %s", rec.vname, rec.nname); printf("\nGeben Sie die Höhe der Spende ein: "); scanf("%f", &rec.betrag); ausgabe( rec ); return 0; } void ausgabe(struct daten x) { printf("\nSpender %s %s gab %.2f DM.\n", x.vname, x.nname, x.betrag); }
Ich versteh jedoch nur eine Sache nicht: beim zweiten scanf wird für den struct der Adressoperator verwendet und beim ersten nicht. Kann mir das jmd. erklären?
-
ich könnte mutmaßen: Beim 2. scanf() bezieht sich der Adressoperator nicht auf den struct, sondern auf betrag. beim ersten scanf muss der Adressoperator für vname und nname nicht angegeben werden, da vname und nname bereits Pointer sind...?!?
-
sharp schrieb:
ich könnte mutmaßen: Beim 2. scanf() bezieht sich der Adressoperator nicht auf den struct, sondern auf betrag. beim ersten scanf muss der Adressoperator für vname und nname nicht angegeben werden, da vname und nname bereits Pointer sind...?!?
ja
-
sharp schrieb:
ich könnte mutmaßen: Beim 2. scanf() bezieht sich der Adressoperator nicht auf den struct, sondern auf betrag. beim ersten scanf muss der Adressoperator für vname und nname nicht angegeben werden, da vname und nname bereits Pointer sind...?!?
Dem kann ich auch nur zustimmen.
Haben wir auch so in der Uni gelernt, der Name des Array ist die Adresse auf das erste Element.
-
Nestor schrieb:
Haben wir auch so in der Uni gelernt, der Name des Array ist die Adresse auf das erste Element.
Der Name des Array's ist ein Symbol/Bezeichner/so ähnlich.
Das Array evaluiert in einem Ausdruck zu einem Zeiger auf den Anfang, wenn's kein sizeof() ist.
Soviel zur Schulmeisterei.