Frage zu typedef bei Strukturen



  • Hallo!

    Ich habe ein Verständnisproblem bei der Verwendung von typedef in Strukturen. Angeblich soll die Verwendung von typedef ja vorteilhafter sein, doch kann ich den Vorteil noch nicht erkennen.

    Hier ein Beispiel

    struct Person 
    {
       int	sv_nummer;
       char vorname[20], name[20];
       char telnr[15];
       int	alter;
    } max, moritz;	//Definition zweier Struktur-Variablen
    
    int main(void) 
    {
    	/* Zugriff auf die Struktur-Komponenten */
    	max.alter = 25;
    	moritz.alter = max.alter + 2;
    
    	return 0;
    }
    

    Wie kann ich das Beispiel nun mit typedef lösen?
    Wo liegen die Vorteile?
    Wie greife ich auf die Strukturmember zu? 😕


  • Mod

    typedef struct 
    {
       int    sv_nummer;
       char vorname[20], name[20];
       char telnr[15];
       int    alter;
    } Person;    // Person ist nun ein anderer Name für dieses struct
    
    int main(void)
    {
      Person max, moritz;   // Zwei Variablen vom Typ Person
    
      max.alter = 25;
      moritz.alter = max.alter + 2;
    
      return 0;
    }
    

    Ist der Vorteil nun klar?



  • Ich weiss nicht genau was du meinst. Aber der Vorteil mit typedef ist folgender:

    Wenn du folgenden Code hast

    struct Point
    {
    	float x;
    	float y;
    };
    
    int main()
    {
    	struct Point p; // Hier wird das 'struct' gebraucht
    }
    

    Dann braucht es in Zeile 9 das keyword 'struct'.

    Wenn du nun die struct mit einem typedef hast, so kannst du das 'struct' keyword weglassen. Du hast dann:

    typedef struct
    {
    	float x;
    	float y;
    } Point;
    
    int main()
    {
    	Point p; // Hier wird das 'struct' nicht gebraucht
    }
    

    Keine Ahnung ob du diesen Vorteil von typedefs in Verbindung mit struct meintest.



  • SeppJ schrieb:

    typedef struct 
    {
       int    sv_nummer;
       char vorname[20], name[20];
       char telnr[15];
       int    alter;
    } Person;    // Person ist nun ein anderer Name für dieses struct
    
    int main(void)
    {
      Person max, moritz;   // Zwei Variablen vom Typ Person
    
      max.alter = 25;
      moritz.alter = max.alter + 2;
    
      return 0;
    }
    

    Ist der Vorteil nun klar?

    Bin ich im falschen Film?? Oder ich habe keine Ahnung von C...

    Ist die Referenz auf ein Feld in einer typedef struct Definition nicht

    ->
    also:
    max->alter
    

    😕



  • confused... schrieb:

    Ist die Referenz auf ein Feld in einer typedef struct Definition nicht

    ->
    also:
    max->alter
    

    😕

    1. In C gibt es keine Referenzen, sondern Zeiger.
    2. max ist kein Zeiger, sondern eine direkte Instanz der struct. Dann braucht man den . Operator.



  • icarus2 schrieb:

    confused... schrieb:

    Ist die Referenz auf ein Feld in einer typedef struct Definition nicht

    ->
    also:
    max->alter
    

    😕

    1. In C gibt es keine Referenzen, sondern Zeiger.
    2. max ist kein Zeiger, sondern eine direkte Instanz der struct. Dann braucht man den . Operator.

    ok, und wann benutzt man dann

    ->
    

    😕



  • confused... schrieb:

    ok, und wann benutzt man dann

    ->
    

    😕

    Wenn man einen Pointer hat.

    Hier ein Beispiel:

    int main()
    {
    	Point p1; // Eine Variable vom Typ Point
    	Point* p2 = malloc(sizeof(*p2)); // p2 ist ein Zeiger, der auf eine Variable vom Typ Point zeigt
    
    	p1.x = 3;
    	p1.y = 7;
    
    	p2->x = 3;
    	p2->y = 7;
    }
    


  • icarus2 schrieb:

    confused... schrieb:

    ok, und wann benutzt man dann

    ->
    

    😕

    Wenn man einen Pointer hat.

    Hier ein Beispiel:

    int main()
    {
    	Point p1; // Eine Variable vom Typ Point
    	Point* p2 = malloc(sizeof(*p2)); // p2 ist ein Zeiger, der auf eine Variable vom Typ Point zeigt
    
    	p1.x = 3;
    	p1.y = 7;
    
    	p2->x = 3;
    	p2->y = 7;
    }
    

    Korrekt, wobei den malloc braucht man nicht unbedingt....

    Andererseits wirst Du fast immer die "*" (also Pointer) Variante bei typedef structs finden....

    Ich wünsche allen hier ein schönes Osterfest....


  • Mod

    confused... schrieb:

    Andererseits wirst Du fast immer die "*" (also Pointer) Variante bei typedef structs finden....

    Das zweifle ich mal ganz stark an.



  • #include <stdio.h>
    #include<stdlib.h>
    typedef struct _gugu
    {
    	int		blabla;
    } gugu;
    void print_hugo1 (gugu hugo1)
    {
    	printf("%d\n" , hugo1.blabla);
    	return;
    }
    void print_hugo2 (gugu *hugo2)
    {
    	printf("%d\n" , hugo2->blabla);
    	return;
    }
    int main()
    {  
        gugu	hugo1;
        gugu	*hugo2 = malloc(sizeof(*hugo2));
        hugo1.blabla = 100;
        print_hugo1(hugo1);
        hugo2->blabla = 200;
    	print_hugo2(hugo2);
        return 0;
    }
    

    Das C ist schon ne lustige Sprache.... 🙂



  • confused... schrieb:

    [...]
    Das C ist schon ne lustige Sprache.... 🙂

    Wieso?



  • confused... schrieb:

    #include <stdio.h>
    #include<stdlib.h>
    typedef struct _gugu
    {
    	int		blabla;
    } gugu;
    void print_hugo1 (gugu hugo1)
    {
    	printf("%d\n" , hugo1.blabla);
    	return;
    }
    void print_hugo2 (gugu *hugo2)
    {
    	printf("%d\n" , hugo2->blabla);
    	return;
    }
    int main()
    {  
        gugu	hugo1;
        gugu	*hugo2 = malloc(sizeof(*hugo2));
        hugo1.blabla = 100;
        print_hugo1(hugo1);
        hugo2->blabla = 200;
    	print_hugo2(hugo2);
        return 0;
    }
    

    Das C ist schon ne lustige Sprache.... 🙂

    Wo ist die Prüfung, ob malloc() fehlschlägt ?! Wo ist das free() ?!



  • hugo2 schrieb:

    Wo ist die Prüfung, ob malloc() fehlschlägt ?! Wo ist das free() ?!

    Das ist doch alles überbewertet. 🙂
    malloc() geht ja in den meisten Fällen gut und free()... Naja, der Speicher wird immer größer und billiger. 🤡


Anmelden zum Antworten