Stefan R. schrieb:
> Aber schön, daß sich Tage später auch nochmal ein Dritter wichtig machen
> kann.
Ich möchte mich jetzt auch noch 'wichtig' machen und versuche das in
einem Beispiel, das mir mal geholfen hat struct, definition und Speicher
besser zu verstehen:
'Deklaration'
Hier wird nur ein Structure Typ mit 5 Elementen erstellt
1 | struct Id3_tag {
|
2 | char title[30];
|
3 | char kuenstler[30];
|
4 | char album[30];
|
5 | short jahr;
|
6 | char kommentar[30];
|
7 | char genere[30];
|
8 | };
|
Damit wird aber nur 'Deklariert', nicht aber Speicherplatz reserviert.
Speicherplatz wird erst dann reserviert, wenn eine Variable, also ein
Bezeichner von diesem Structurtyp definiert wird
Sprich: 'Definition'
Und zwar eine Definition sieht dann so aus:
1 | /* Definition einer Strukturvariable */
|
2 | struct Id3_tag data1;
|
Dabei wird jetzt Speicherplatz für den Typ struct Id3_tag und seine
einzelnen Elemente reserviert.
Deklaration + Definition zusammen in einem Abwasch:
1 | struct Id3_tag {
|
2 | char title[30];
|
3 | char kuenstler[30];
|
4 | char album[30];
|
5 | short jahr;
|
6 | char kommentar[30];
|
7 | char genere[30];
|
8 | } data ;
|
Hier wurde dann eine Struktur Id3_tag deklariert und eine
Strukturvariable namens data definiert.
Wenn man das so zusammenfasst, dann kann auch der Name der Strukture
wegfallen wie :
1 | struct {
|
2 | char title[30];
|
3 | char kuenstler[30];
|
4 | char album[30];
|
5 | short jahr;
|
6 | char kommentar[30];
|
7 | char genere[30];
|
8 | } data ;
|
Der TO verwendet 'typedef' also eine typendefinition,
da kann dann bei der Verwendung des Strukturtypes das Schlüsselwort
struct wegfallen:
1 | typedef struct Id3_t data1;
|
wegen 'typedef' kann dann eine Struktur mit einer Strukturvariablen
definiert werden ( Speicherplatz wird eingerichtet, auf die Variable
kann jetzt zugegriffen werden )
1 | Id3_t data1; // normalerweise: struct Id3_tag data1;
|
Damit die Wichtigmacherei einen Abschluss gibt:
Solches Synonym kann man bei der Deklaration einer Struktur so
erstellen:
1 | typedef struct Id3_tag{
|
2 | char title[30];
|
3 | char kuenstler[30];
|
4 | char album[30];
|
5 | short jahr;
|
6 | char kommentar[30];
|
7 | char genere[30];
|
8 | } Id3_t ;
|
Und anstatt 'struct Id3_tag' wird nur noch der Strukturtyp 'Id3_t'
verwendet.
Jetzt kommt der Zugriff auf die Deklarierte Variable! nicht auf die
Definition wie im Eingangspost
/* die Definition im header */
1 | typedef struct Id3_tag{
|
2 | char title[30];
|
3 | char kuenstler[30];
|
4 | char album[30];
|
5 | short jahr;
|
6 | char kommentar[30];
|
7 | char genere[30];
|
8 | } Id3_t ;
|
/* Verwenden im Programm */
1 | /* die Structure wurde nur definiert*/
|
2 | /* jetzt wird eine Variable davon deklariert */
|
3 |
|
4 | Id3_t data;
|
5 |
|
6 | /* und jetzt kann man mit der Variablen arbeiten */
|
7 |
|
8 | strncpy(data.titel, "Hurra die Schule brennt", 29);
|
9 | strncpy(data.kuenstler, "Tom & Jerry", 29 );
|
10 | ..
|
11 |
|
12 | /* ein Beispiel für direkte Zuweisung*/
|
13 | data.jahr=2009;
|
14 | ..
|
@Mara
Du hast schon den richtigen Ansatz, aber das Prinzip noch nicht
verstanden.
Wenn Du auf deinen Type das Element zuweisen willst
1 | CONFIG.Max_Voltage = 240;
|
musst du erst einmal von deinem Type eine Variable erstellen,
dein Type heist CONFIG, davon musst du dann eine Variable erstellen:
1 | CONFIG myCFG; // jetzt existiert Speicherplatz für Werte und eine Variable
|
2 |
|
3 | ..
|
4 |
|
5 | /* jetzt kannst du damit arbeiten */
|
6 |
|
7 | mycfg.MAX_Voltage = 240;
|
Ich empfehle dir in jedem Fall ein c buch.
Hier mein Tip:
Grundkurs C
von Jürgen Wolf
Verlag Galileo Computing
ISBN 978-3-8362-1546-6
EUR 9.90
Dort findest du sehr verständlich solche Beispiele
lg
rudi ;-)
@cybloard
µC.net ist und bleibt eines der weiterführenden Foren überhaupt.
Mir hat das all die Jahre enormes Basis Wissen für mein Hobby
eingebracht.
Gesten wie deine über denen Leuten, die µC.net prägen und immer
hilfsbereit sind, das ist peinlich, wie du darauf reagierst und
charakter zeigst; auf Lebenszeit mit Sicherheit Bewerbungsabsage von
'uns', sollte jemals eine Bewerbung von dir ins Mutterhaus flattern.
Dich schick ich höchst persönlich erst einmal zu einem 'Benimm dich
kurs'
Übe dich mal in Geduld und Ausdauer,
auch dir hatte man mal damit 'das meiste' Basis Wissen beigebracht,
heute kommen nur noch 'Macho Gehabe' von dir rüber.
Ist traurig, weil in dir viel steckt, aber du kannst es nicht umsetzen,
und das ist das traurigste daran.