Zugriff auf ein Array von Strukturen

Quick_Mik

Mitglied
Hallo Leute.

Ich hab da ein Riesenproblem.

Ich definiere eine Struktur, z.B.:
Code:
struct datensatz
{
int a;
int b;
};

Anschließend erstelle ich ein Feld von Strukturen:
Code:
datensatz namen[10];

Dieses array wird dann an eine Prozedur übergeben:
Code:
datensatz_anlegen(&namen,  &index);
Wenn ich nun in der Prozedur auf die einzelnen Elemente des arrays zugreifen wir, bekomme ich ständig Fehler beim compilieren. Ich habe folgendes versucht, auf die einzelnen Elemente zuzugreifen:
Code:
void datensatz_anlegen(datensatz  *namen, int  *index)
  {
  1. Versuch 
  name[index].a;
  2. Versuch 
  *name[index].a;
  3. Versuch 
  (*name[index]).a;
  4. Versuch 
  &name[index].a;
  5. Versuch 
  (&name[index]).a;
  }

Der Compiler sagt mir immer entweder "illegal structure operation" oder "structure expected on left side of . "

Kann mir jemand sagen, wo mein Fehler liegt?

Danke im Voraus
 
Code:
datensatz_anlegen(&namen,  &index);

Das Problem hier ist du übergibst ein struct datensatz (*)[10], sprich ein Zeiger auf das Array . Es recih namen anzugeben weil das der erste Index auf das Array ist , ergo
Code:
datensatz_anlegen(namen,  &index);

Um auf ein Element in der Funktion zuzugreifen nimmt man dann
Code:
namen[*index].a
// oder
(namen + *index)->a;

Wieso ist eigentlich Index ein Zeiger !?
 
Danke für den Tipp!

Index ist ´n Zeiger, da ich mir das so angewöhnt habe, generell by reference zu übergeben statt by value.

Ich denke, dass dies nicht unbedingt ein Problem darstellt, oder?

Ich muss halt nur die Rangfolge der Operatoren beachten,z.B. Punktoperator kommt vor Dereferenzoperator etc.
 
Wenn du C++ verwendest, gibst es noch eine andere Methode zum Übergeben per Referenz, nämlich Referenzen. ;) Sie heissen tatsächlich so.
In C gibt es sie noch nicht, aber in C++ sind sie ziemlich wichtig. Eigentlich handelt es sich um Pointer, allerdings sind sie syntaktisch eleganter.


Beispiel:
Code:
void MeineFunktion( int& r )
{
  // r ist eine referenz auf ein int
  // es handelt sich tatsächlich um die übergebene Variable,
  // nur unter einem anderen Namen
  r += 1;
}

int main()
{
  int i = 0;
  // i ist 0 

  MeineFunktion( i );
 
  // über die Referenz r auf i hat die Funktion i geändert
  // i hat nun den Wert 1

  return 0;
}
 
-

Index ist ´n Zeiger, da ich mir das so angewöhnt habe, generell by reference zu übergeben statt by value.

Ich denke, dass dies nicht unbedingt ein Problem darstellt, oder?
Nein, generell ist dies kein Problem, allerdings macht deine Vorgehensweise den Code nicht gerade leserlich. Wenn du in so einer Situation unbedingt mit einer Referenz arbeiten willst, dann deklarier dir den Parameter wenigstens als Konstante, damit man gleich sieht, dass du den Wert nicht verändern willst. Es könnte ja auch mal passieren, dass du unabsichtlich der Variablen etwas zuweist, obwohl dies nicht dein Plan war und dann hast du den Salat.

Gruß
 
Zurück