struct

Lese­zeit: 3 Minu­ten

Arrays erwei­sen sich als geeig­net, wenn eine Viel­zahl von Daten eines glei­chen Varia­blen­typs ver­ar­bei­tet wer­den sol­len. Struk­tu­ren (struct) sind hin­ge­gen eine Samm­lung und Beschrei­bung ver­schie­de­ner Daten. Sie kön­nen belie­bi­ge Daten­ty­pen verwenden. 

Die Struk­tur ist die Vor­la­ge für die Defi­ni­ti­on der kon­kre­ten Daten.

In den Bei­spie­len wer­den ver­schie­de­ne Infor­ma­tio­nen zu den ein­zel­nen Städ­ten mit­hil­fe unter­schied­li­cher Daten­ty­pen zusammengefasst.

Bei­spiel Defi­ni­ti­on als ein­zel­ne Arrays:

Die Vor­la­ge:

struct Stadt
{
  int Platz;
  String Name;
  String KFZ_Kennzeichen;
  float Einwohner;
  String Vorwahl;
  int Hoehe;
};

Defi­ni­ti­on der Daten:

Stadt Berlin =
{
  1,
  "Berlin",
  "B",
  3.64,
  "030",
  30
};

Stadt Hamburg =
{
  2,
  "Hamburg",
  "HH",
  1.84,
  "040",
  6
};

Stadt Muenchen =
{
  3,
  "M\u00fcnchen",
  "M",
  1.84,
  "040",
  519
};

Die Zuord­nung der der ver­schie­de­nen Varia­ble einer struct wird über die Punkt-Schreibweise erle­digt.
StadtName.Platz → int Platz
Stadt​na​me​.Name → String Name
Stadtname.KFZ-Kennzeichen → String KFZ-Kennzeichen
StadtName.Einwohner → float Ein­woh­ner
StadtName.Vorwahl → String Vor­wahl
StadtName.Hoehe → int Hoehe

Bei­spie­le:

Berlin.Name = "Berlin-Kreuzberg";
Hamburg.Hoehe = 520;
Muenchen.Platz = 4;

Eine Metho­de zeigt die Daten an ...

void ZeigeDaten(struct Stadt StadtName)
{
  Serial.print(String(StadtName.Platz) + "\t");
  Serial.print(StadtName.Name + "\t\t");
  Serial.print(StadtName.KFZ_Kennzeichen + "\t");
  Serial.print(String(StadtName.Einwohner) + "\t\t");
  Serial.print(String(StadtName.Hoehe) + "\t\t");
  Serial.println(StadtName.Vorwahl);
}

sie wird mit dem Namen der Stadt aufgerufen.

  ZeigeDaten(Berlin);
  ZeigeDaten(Hamburg);
  ZeigeDaten(Muenchen);

Das voll­stän­di­ge Programm:

struct Stadt
{
  int Platz;
  String Name;
  String KFZ_Kennzeichen;
  float Einwohner;
  String Vorwahl;
  int Hoehe;
};

Stadt Berlin =
{
  1,
  "Berlin",
  "B",
  3.64,
  "030",
  30
};

Stadt Hamburg =
{
  2,
  "Hamburg",
  "HH",
  1.84,
  "040",
  6
};

Stadt Muenchen =
{
  3,
  "M\u00fcnchen",
  "M",
  1.84,
  "040",
  519
};

void setup()
{
  Serial.begin(9600);

  // Formatierung mit Tabstopps
  Serial.println("Platz\tName\t\tKfz\tEinwohner\tH\u00f6he \u00fcberNN\tVorwahl");
  ZeigeDaten(Berlin);
  ZeigeDaten(Hamburg);
  ZeigeDaten(Muenchen);
}

void loop()
{
  // bleibt leer, Programm läuft nur einmal
}

void ZeigeDaten(struct Stadt StadtName)
{
  Serial.print(String(StadtName.Platz) + "\t");
  Serial.print(StadtName.Name + "\t\t");
  Serial.print(StadtName.KFZ_Kennzeichen + "\t");
  Serial.print(String(StadtName.Einwohner) + "\t\t");
  Serial.print(String(StadtName.Hoehe) + "\t\t");
  Serial.println(StadtName.Vorwahl);
}

Bei­spiel Defi­ni­ti­on als zusam­men­ge­fass­tes Array:

Die Vor­la­ge:

struct Stadt
{
  int Platz;
  String Name;
  String KFZ_Kennzeichen;
  float Einwohner;
  String Vorwahl;
  int Hoehe;
};

const int Max = 3;

struct Stadt Namen[Max] = 
{
  {1, "Berlin", "B", 3.64, "030", 30},
  {2, "Hamburg", "HH", 1.84, "040", 6},
  {3, "M\u00fcnchen", "M", 1.47, "089", 519}
};

Der Zugriff auf die Ele­men­te erfolgt jetzt über die Punkt-Schreibweise und die Num­mer des Elements.

Bei­spiele:

Namen[0].Name = "Berlin-Kreuzberg";
Namen[1].Platz = 4;
Namen[2].Hoehe = 520;

Da es sich um ein Array han­delt, kann die Aus­ga­be über eine for-Schleife erle­digt werden:

for (int i = 0; i < Max; i++ )
{
  Serial.print(String(StadtName.Platz) + "\t");
  Serial.print(StadtName.Name + "\t\t");
  Serial.print(StadtName.KFZ_Kennzeichen + "\t");
  Serial.print(String(StadtName.Einwohner) + "\t\t");
  Serial.print(String(StadtName.Hoehe) + "\t\t");
  Serial.println(StadtName.Vorwahl);
}

Arrays

Letzte Aktualisierung: 27. Nov 2020 @ 9:27