Hallo, ich brauch dringend Hilfe. Ich möchte ein Array anlegen welches in jedem Feld ein struct hat. Anschließend möchte ich an jede Stelle in diesem Stucht einen Wert speichern und danach in das nächste Arrayfeld springen. Hat jemand eine Idee wie ich das machen kann, ich würde mich freuen, wenn mir jemand ein Beispielcode in C schicken würde.
Anna S. schrieb: > Hallo, > ich brauch dringend Hilfe. > Ich möchte ein Array anlegen welches in jedem Feld ein struct hat. > Anschließend möchte ich an jede Stelle in diesem Stucht einen Wert > speichern und danach in das nächste Arrayfeld springen. > Hat jemand eine Idee wie ich das machen kann, ich würde mich freuen, > wenn mir jemand ein Beispielcode in C schicken würde. So ein Beispiel wirst du wohl in jedem noch so grindigen C-Buch finden. Was? Du hast keines? Dann wirds aber Zeit!
1 | struct irgendwas |
2 | {
|
3 | int a; |
4 | }
|
5 | |
6 | struct irgendwas werte[10]; |
7 | |
8 | int main() |
9 | {
|
10 | werte[0].a = 5; |
11 | }
|
Und kauf dir ein Buch!
Danke für die schnelle Antwort ! Ich würde allerdings gerne den Index weglassen und statdessen Pointer benutzen um die einzelnen Felder anzusprechen und in dem stuct sollten mehrere Variablen stehen die als erstes beschrieben werden und schließend springe ich in das nächste ArrayFeld.
z.B. so:
1 | struct irgendwas |
2 | {
|
3 | int a; |
4 | }
|
5 | |
6 | struct irgendwas werte[10]; |
7 | |
8 | int main() |
9 | {
|
10 | struct irgendwas *p; |
11 | |
12 | for( p=werte; p<werte+10; ++p ) |
13 | {
|
14 | p->a = 5; |
15 | }
|
16 | return 0; |
17 | }
|
Das Feld (oder: array) sind übrigens alle 10 Elemente; ein einzelnes davon ist kein Feld, sondern eben ein Element (oder in diesem Fall eine struct).
1 | for( p=werte; p<werte+10; ++p ) |
2 | {
|
3 | p->a = 5; |
4 | }
|
würde ich nicht machen. Zeiger zu inkrementieren ist immer ein bisschen gefährlich. Wie du sagen würdest: "Steht auch in einem C-Buch" besser:
1 | |
2 | int i; |
3 | p = werte; |
4 | for( i=0; i<10; ++i ) |
5 | {
|
6 | (p+i)->a = 5; |
7 | }
|
So veränderst du p nicht und er steht am Ende immer noch auf dem ersten Arrayeintrag.
> int i; > p = werte; > for( i=0; i<10; ++i ) > { > (p+i)->a = 5; > } Und (p+i)->a ist nur eine andere Schreibweise für p[i].a, was in meinen Augen besser lesbar ist. Da sich p nicht rändert, kann man stattdessen auch gleich werte schreiben. Heraus kommmt
1 | werte[i].a = 5; |
Damit schließt sich der Kreis und wir sind wieder am Anfang beim Post von Karl Heinz ;-)
Sascha schrieb:
>
1 | for( p=werte; p<werte+10; ++p ) |
2 | > { |
3 | > p->a = 5; |
4 | > } |
5 | >
|
> > würde ich nicht machen. Zeiger zu inkrementieren ist immer ein bisschen > gefährlich. Wie du sagen würdest: "Steht auch in einem C-Buch" In wie fern? Glaub ich nicht. > besser: > >
1 | > int i; |
2 | > p = werte; |
3 | > for( i=0; i<10; ++i ) |
4 | > { |
5 | > (p+i)->a = 5; |
6 | > } |
7 | >
|
Ist klar, der Code ist genau so schlecht lesbar. Besser ist wohl zweifelsohne: p[i].a = 5; Ist aber langsamer als einen Pointer zu inkrementieren. > So veränderst du p nicht und er steht am Ende immer noch auf dem ersten > Arrayeintrag. Und wofür soll das gut sein?
Ich habe übrigens nie gesagt, daß meine Variante schöner ist als ein Index. Aber es wurde explizit nach einer Zeigervariante gefragt, da wollte ich mal nett sein. Mir dann vorzuwerfen, daß es mit Index auch geht ist unfair. Die Welt ist ungerecht... Aber von wegen gefährlich: was ist daran gefährlicher als alles, was man mit Zeigern machen kann? Wem das zu gefährlich ist, muß halt Pascal oder notfalls BASIC nehmen :-)
yalu schrieb: > Damit schließt sich der Kreis und wir sind wieder am Anfang beim Post > von Karl Heinz ;-) Und einem guten Compiler, der von sich aus erkennt, was es mit dem Index auf sich hat, und den Zugriff über Index durch einen Pointer und dessen Inkrementierung innerhalb der Schleife ersetzt :-)
Karl heinz Buchegger schrieb: > Und einem guten Compiler, der von sich aus erkennt, was es mit dem Index > auf sich hat, und den Zugriff über Index durch einen Pointer und dessen > Inkrementierung innerhalb der Schleife ersetzt :-) WAS? Aber das ist doch "gefährlich". ;)
Klaus Wachtler schrieb: > Ich habe übrigens nie gesagt, daß meine Variante schöner ist als ein > Index. Mein (und auch Simons) Einwand mit der Lesbarkeit bezog sich nicht auf deinen, sondern auf Saschas Vorschlag mit dem etwas unüblichen Konstrukt (p+i)->a.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.