Hilfe Struct in einem Array

#1430885
Lesenswert?

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.
#1430888
Lesenswert?

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!
#1430912
Lesenswert?

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.
Gast #1432131
Lesenswert?

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.
Gast #1432151
Lesenswert?

>  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 ;-)
Persönliche Seite #1432210
Lesenswert?

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?
#1432246
Lesenswert?

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 :-)
#1432276
Lesenswert?

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 :-)
Gast #1432517
Lesenswert?

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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren