www.mikrocontroller.net

Forum: PC-Programmierung Datenstruktur


Autor: Michael Schuler (michi2504)
Datum:

Bewertung
0 lesenswert
nicht 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
Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Thomas Decker (t0mmy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.