Pointer für Profis
-
Hallo Forum!
Ich möchte in der Funktion Values ohne
den Index arbeiten (MyHaus[iCounter]).
Wie gebe ich aber der scanf-Funktion
die Adresse der member-Variablen mit?
Da ich doch einen Pointer übergebe,
zeigt er mit auf die erste Struktur,
dann würde ich gerne MyHaus++ machen,
um zur nächsten Struktur zu springen
(es gibt ja 3 Stueck).
Wie aber mache ich scanf die Adresse
der Members bekannt?struct Haus { char Tuer[30]; char Ofen[30]; unsigned int Zimmer; }; void Values( struct Haus* MyHaus); int main(int argc, char *argv[]) { struct Haus MyHaus[3]; Values(&MyHaus); return 0; } void Values( struct Haus * MyHaus) { int iCounter; for (iCounter = 0; iCounter < 3; iCounter++) { printf("\nGeben Sie den Tuernamen ein:"); scanf("%s",MyHaus[iCounter].Tuer); } }
-
MyHaus++; MyHaus->Tuer;
Aber warum willst du ohne Index arbeiten?
-
Sonst bringen mir doch die Pointer nichts, oder?
-
Und wie gebe ich die Adresse bei unsigned int an?
-
und wie lange willst du dann MyHaus++ machen ? irgendwann ist dein array
zu ende und dann bekommst du irgendeine grütze und absturz.
-
Wenn ich den Zeiger der Funktion übergebe,
habe ich die Adresse auf die erste Struktur!Dann Werte einlesen über scanf!
Jetzt Zeiger inkrementieren, entspricht 2. Struktur,
Werte wieder einlesen!Nocheinmal für dritte Struktur:
Zeiger inkrementieren, Werte einlesen.Habe immer noch ein Verständnisproblem, wie ich die Adressen übergebe.
-
Ein Array wird implizit in eine Pointer verwandelt, wenn das benötigt wird, also brauchst du nur den Namen anzugeben (oder du holst dir explizit die Adresse des ersten Elements):
// Variante A: Values(MyHaus); //Variante B: Values(&MyHaus[0]);
(btw, im Sinne der Wiederverwendung solltest du die Größe des Arrays nicht fest eintragen :))
-
// Objekterzeugung struct Haus MyHaus[3]; // Ubergabe Pointer an Funktion Values Values(&MyHaus);
war damit falsch! Oder?
Kannst du mir noch sagen, wie ich in Values,
dann mit diesem Pointer den Members die Werte zuweise,
weibei ich MyHaus benutzen möchte und nicht MyHaus[0]!Die Wiederverwendbarkeit ist hier natürlich nicht gegeben.
Mir geht es ums Verständnis!
-
Bin mir nicht ganz sicher, aber vermutlich war es falsch
Und in der Values() Funktion kannst du mit z.B. "MyHaus->Zimmer=10;" auf die Member des ersten Array-Elements zugreifen oder mit "MyHaus[i].Tuer[0]='A';" auf das i-te Haus des Arrays.
@scanf: Für Text-Eingaben dürfte dein Code funktionieren, für den Integer-Wert benötigst du "scanf("%d",&(MyHaus[i].Zimmer));"
-
Juhu, jetzt sind wir an dem Punkt:
Kann man deine letzte Zeile
scanf("%d",&(MyHaus[i].Zimmer);
auch ohne den Index schreiben?
Also nicht per Index auf die richtige Struktur zugreifen,
sondern eben über den mitgelieferten Pointer?Es wäre
wenn sich die
noch klärt,
damit ich wiederkann
-
Ja, klar: scanf("%d",&(MyHaus->Zimmer));"
-
Klasse!
Bist halt ein echter Profi!