www.vorhilfe.de
Vorhilfe

Kostenlose Kommunikationsplattform für gegenseitige Hilfestellungen.
Hallo Gast!einloggen | registrieren ]
Startseite · Forum · Wissen · Kurse · Mitglieder · Team · Impressum
Navigation
 Startseite...
 Neuerdings beta neu
 Forum...
 vorwissen...
 vorkurse...
 Werkzeuge...
 Nachhilfevermittlung beta...
 Online-Spiele beta
 Suchen
 Verein...
 Impressum
Das Projekt
Server und Internetanbindung werden durch Spenden finanziert.
Organisiert wird das Projekt von unserem Koordinatorenteam.
Hunderte Mitglieder helfen ehrenamtlich in unseren moderierten Foren.
Anbieter der Seite ist der gemeinnützige Verein "Vorhilfe.de e.V.".
Partnerseiten
Weitere Fächer:

Open Source FunktionenplotterFunkyPlot: Kostenloser und quelloffener Funktionenplotter für Linux und andere Betriebssysteme
Forum "C/C++" - typedef struct
typedef struct < C/C++ < Programmiersprachen < Praxis < Informatik < Vorhilfe
Ansicht: [ geschachtelt ] | ^ Forum "C/C++"  | ^^ Alle Foren  | ^ Forenbaum  | Materialien

typedef struct: Frage (beantwortet)
Status: (Frage) beantwortet Status 
Datum: 13:07 Di 15.04.2008
Autor: Auron2009

Habe eine Frage zu structs und typedef. Ich kannte bisher nur folgende Form:

typedef struct
{
   int tag;
   char monat[10];
   int jahr;
} Datum;

Nun könnte ich mit
Datum geburtstag;
ein Struct mit Namen "geburtstag" vom Typ "Datum" erzeugen.


Nun habe ich jedoch folgendes gesehen:

typedef struct l_knoten
{
   int l_daten;
   struct l_knoten *l_next;
} L_knoten;

Also einmal ein Name vor den geschweiften Klammern und einmal dahinter (l_knoten bzw. L_knoten). Wo ist der Unterschied bzw. welche Funktionen haben die beiden Namen?


Vielen Dank für eure Hilfe!

        
Bezug
typedef struct: Mitteilung
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 15:37 So 20.04.2008
Autor: Auron2009

weiß vielleicht doch noch jemand eine Antwort? Danke!

Bezug
        
Bezug
typedef struct: Antwort
Status: (Antwort) fertig Status 
Datum: 16:15 So 20.04.2008
Autor: andihit

Hi,

Mit

typedef struct l_knoten
{
   int l_daten;
   struct l_knoten *l_next;
} L_knoten;

Deklarierst du in deiner Struktur einen Zeiger auf die eigene Struktur (in der Definition "l_knoten").


Wenn du
typedef struct
{
   int l_daten;
   struct L_knoten *l_next;
} L_knoten;

schreiben würdest, gibt's später bei der Zuweisung folgende Warnung: "assignment from incompatible pointer type".

Weil der Compiler das L_knoten noch nicht kannte bei der Deklarierung (merkwürdigerweise kann man bei der Definition auch "struct irgendwas *l_next;" schreiben, und die Warnung kommt erst bei der Zuweisung ... der C Compiler ist eben nicht gesprächig ;))

Bezug
                
Bezug
typedef struct: Frage (beantwortet)
Status: (Frage) beantwortet Status 
Datum: 17:38 So 20.04.2008
Autor: Auron2009

Also ist das l_knoten nur ein Name, damit der Compiler weiß auf was der Zeiger im Struct zeigen soll. Also sind sowohl l_knoten als auch L_knoten Namen für den struct.
Könnte man jetzt später im Programm auch mittels "struct l_knoten irgendwas" ein Struct erzeugen oder geht das weiterhin nur mit "struct L_knoten irgendwas"?

Bezug
                        
Bezug
typedef struct: Antwort
Status: (Antwort) fertig Status 
Datum: 21:30 Mo 21.04.2008
Autor: rainerS

Hallo!

> Also ist das l_knoten nur ein Name, damit der Compiler weiß
> auf was der Zeiger im Struct zeigen soll. Also sind sowohl
> l_knoten als auch L_knoten Namen für den struct.

Nein, nicht ganz. l_knoten ist ein Name (Tag), der nur in Verbindung mit dem speziellen Wort struct auftreten kann. L_knoten ist ein Typ, der durch typeder deklariert wurde. Das Tag dient nur dazu, verschiedene Deklarationen miteinander in Verbindung zu bringen. Zum Beispiel funktioniert auch folgendes:

typedef struct l_knoten L_knoten

(Hier wird der Typ L_knoten als ein struct mit Namen l_knoten deklariert. Das ist eine unvollständige Deklaration.)

1: struct l_knoten
2: {
3:    int l_daten;
4:    struct l_knoten *l_next;
5: };


(Hier wird die Deklaration vervollständigt. Von nun an kann man Variablen definieren.)

>  Könnte man jetzt später im Programm auch mittels "struct
> l_knoten irgendwas" ein Struct erzeugen oder geht das
> weiterhin nur mit "struct L_knoten irgendwas"?

struct L_knoten ist falsch, denn L_knoten ist ja schon ein Typ. Die korrekte Definition einer Variablen wäre

L_knoten var1;

oder

struct l_knoten var1;

Viele Grüße
   Rainer


Bezug
Ansicht: [ geschachtelt ] | ^ Forum "C/C++"  | ^^ Alle Foren  | ^ Forenbaum  | Materialien


^ Seitenanfang ^
www.mathebank.de
[ Startseite | Forum | Wissen | Kurse | Mitglieder | Team | Impressum ]