Forum: PC-Programmierung Datenstruktur


von Michael S. (michi2504)


Lesenswert?

Hallo,

kann mir bitte jemand erklären was in einem C-Code eine Datenstrukur 
ist.
Was das bringt?
wie es funktioniert?
usw.

Hier habe ich ein Bsp aus meinen Unterlagen:
b.c
struct DateTime {
unsigned int Year;
unsigned char Month;
unsigned char Day;
};
void InitDate( struct DateTime* Date,
unsigned char Day, unsigned char Month, unsigned int Year )
{
Date->Year = Year;
Date->Month = Month;
Date->Day = Day;
}


und noch ein Bsp.:

a.c
struct DateTime {
unsigned int Year;
unsigned char Month;
unsigned char Day;
};
void InitDate( struct DateTime* Date, unsigned char Day, unsigned char 
Month, unsigned int
int main()
{
struct DateTime myDate;
InitDate( &myDate, 22, 3, 63 );
}

: Verschoben durch Admin
von Rolf Magnus (Gast)


Lesenswert?

> kann mir bitte jemand erklären was in einem C-Code eine Datenstrukur
> ist.
> Was das bringt?
> wie es funktioniert?
> usw.

Jedes C-Buch kann das.

von Thomas D. (t0mmy)


Lesenswert?


von Karl H. (kbuchegg)


Lesenswert?

Michael Schuler schrieb:
> Hallo,
>
> kann mir bitte jemand erklären was in einem C-Code eine Datenstrukur
> ist.

Eine Zusammenfassung von Daten unter einem gemeinsamen Namen

> Was das bringt?

Das man im Programm Dinge die zusammen gehören auch beisammen lässt

> wie es funktioniert?

indem man ein C Buch liest

> Hier habe ich ein Bsp aus meinen Unterlagen:

schlechtes Beispiel.
Da sieht man nicht, was eine struct tatsächlich bringt

> struct DateTime {
> unsigned int Year;
> unsigned char Month;
> unsigned char Day;
> };

Schön.
Das sagt also eigentlich nur:
Ein komplettes Datum besteht aus Tag, Monat Jahr
(Warum diese Struktur DateTime heisst ist mir allerdings nicht klar. Von 
Zeit kann in dieser Struktur ja keine Rede sein)

Jetzt magst du zb definieren, wie eine Person beschrieben wird

struct Person {
  char            Vorname[30];
  char            Nachname[30];
  struct DateTime Geburtstag;
};

Das sagt: Eine Person wird beschrieben durch Vorname, Nachname und einen 
Geburtstag. Wie dieser Geburtstag aufgebaut ist, ist hier egal. Das weiß 
die struct DateTime. Aber ein Person hat so einen Geburtstag

> void InitDate( struct DateTime* Date,
> unsigned char Day, unsigned char Month, unsigned int Year )
> {
> Date->Year = Year;
> Date->Month = Month;
> Date->Day = Day;
> }

Diese Funktion ist nicht sehr repräsentativ.
Aber nimm zb das hier

void PrintDate( struct DateTime* Date )
{
  printf( "%d-%d-%d", (int)Date->Day, (int)Date->Month, (int)Date->Year 
);
}

Das ist eine Funktion, die das Ausgeben eines Datums realisiert. Sei 
benötigt dazu eine struct DateTime. Was sich in einem Datum verbirgt, 
ist dem Aufrufer dieser Funktion egal, das weiß diese Funktion. Der 
Aufrufer muss sich nicht um die Details kümmern.

zb hast du

int main()
{
  struct Person Programmierer;

  strcpy( Programmierer.Vorname, "Michael" );
  strcpy( Programmierer.Nachname, "Superstar" );
  InitDate( &Programmierer.Geburtstag, 28, 9, 1994 );

  // ab hier ist die Person und auch ihr Geburtstag korrekt 
initialisiert

  PrintDate( &Programmierer.Geburtstag );
}

in der Verwendung arbeite ich nach der Initialisierung des Geburtstages 
nur noch mit dem Datum als Ganzes. Ich muss mich nicht darum kümmern, 
dass so ein Datum aus Tag, Monat, Jahr besteht. Das sind alles Details, 
die in der Struktur verborgen sind. Und wenn das Jahr in der struct 
anders gespeichert werden soll, dann muss ich in main gar nichts ändern. 
main arbeitet immer noch mit einem Datum als Ganzes. Die Details der 
Speicherung sind in InitDate bzw. PrintDate verborgen.

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
Noch kein Account? Hier anmelden.