12.5    Kontrollfragen und Aufgaben

  1. Erklären Sie kurz und bündig, was Strukturen sind.

  2. Was sind Unionen, und worin unterscheiden sie sich von den Strukturen?

  3. Warum lässt sich im folgenden Codeausschnitt die Strukturvariable artikel1 in Zeile (06) nicht erstellen? Was können Sie tun, damit Sie Zeile (06) trotzdem so verwenden können?

    01  struct Artikel {
    02 char schlagzeile[255];
    03 int seite;
    04 int ausgabe;
    05 };
    ...
    06 Artikel artikel1; // Geht nicht
  4. Das folgende Listing enthält einige klassische Zugriffsfehler auf Strukturelemente. Ermitteln Sie diese, und bringen Sie das Programm zum Laufen.

    00  // Kapitel12/aufgabe001.c
    01 #include <stdio.h>
    02 #include <stdlib.h>
    03 #include <string.h>

    04 typedef struct artikel{
    05 char schlagzeile[255];
    06 int seite;
    07 int ausgabe;
    08 } Artikel;

    09 void output( Artikel *a ) {
    10 printf("%s\n", a->schlagzeile);
    11 printf("%d\n", a->seite);
    12 printf("%d\n\n", a->ausgabe);
    13 }

    14 int main(void) {
    15 Artikel art1 = {244, "Die Schlagzeile schlechthin", 33};
    16 Artikel *art2;
    17 Artikel artArr[2];

    18 strncpy( art2->schlagzeile, "Eine Schlagzeile", 255);
    19 art2->seite = 212;
    20 art2->ausgabe = 43;

    21 strncpy( artArr.schlagzeile[0], "Noch eine", 255);
    22 artArr.seite[0] = 266;
    23 artArr.ausgabe[0] = 67;

    24 output( &art1 );
    25 output( art2 );
    26 output( &artArr[0] );
    27 return EXIT_SUCCESS;
    28 }
  5. Da es keinen direkten und portablen Weg gibt, zwei Strukturen mit dem ==-Operator zu vergleichen, erstellen Sie eine Funktion, die zwei Strukturvariablen auf Gleichheit hin überprüft. Folgende Struktur und folgende Strukturvariablen seien hierzu gegeben:

    typedef struct artikel {
    char schlagzeile[255];
    int seite;
    int ausgabe;
    } Artikel;

    Artikel art1 = { "Die Schlagzeile schlechthin", 244, 33 };
    Artikel art2 = { "Die Schlagzeile schlechthin", 244, 33 };
    Artikel art3 = { "Die-Schlagzeile-schlechthin", 244, 33 };

Auch im nächsten Kapitel werden Sie wieder auf Zeiger stoßen, denn dort geht es um die Erstellung dynamischer Datenstrukturen, wie z. B. verketteter Listen. Natürlich werden Sie in diesem fortgeschrittenen Stadium der C-Programmierung auch wieder mit Strukturen und dynamischer Speicherverwaltung arbeiten.