Kann mir vielleicht einer erklären was ein Struct ist.



  • Hallo Leute,

    Ich habe da mal ne Frage an euch vielleicht könnt ihr mir ja Helfen.
    Und zwar könnte mir mal einer von euch erklären was ein "Struct" ist, bitte eine leicht verständlich erklärung, wenn es geht weil ich bin noch ein anfänger in sachen programmieren, also bitte net so dumme kommentar ich mein jeder hat mal irgendwan etwas angefangen. 😉

    Vielen dank schon mal für eure Hilfe.

    Gruß
    DerFuchs



  • Dieser Thread wurde von Moderator/in Jansen aus dem Forum Borland C++ Builder (VCL/CLX) in das Forum ANSI C verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Hallo,

    ein Struct ist eine Datenstruktur mit unterschiedlichen Typen. Z. B.:

    struct Arbeiter{
     char* name;
     char* vorname;
     int alter;
    };
    

    Sowas nutzt man, um eben Daten unterschiedlicher Arten zusammenzuhalten, ähnlich einem Array. Nur dass man in einem Array Daten gleichen Typs speichert. Ausführlicher wirds hier erklärt:
    http://www.pronix.de/modules/C/openbook/c_programmierung_18.php

    Hoffe es hilft.



  • Ich weiche jetzt mal bewusst von der eigentlichen Definition ab,und mach es ganz einfach.
    Ein Struct ist nichts anderes als eine "Datensammlung",d.h. du kannst unter einem "Oberbegriff" irgendwelche Variabeln speichern.
    Beispiel:
    struct Adresse
    {
    int alter;
    int PLZ;
    char strasse[255];
    };
    SO,jetzt kannst du folgendes machen:
    Adresse Meier;
    Meier.alter=30;

    mfg
    Peter



  • ein struct ist eine 'monstervariable'. man kann mehrere variablen zu einer einzigen zusammenbauen.



  • net schrieb:

    ein struct ist eine 'monstervariable'. man kann mehrere variablen zu einer einzigen zusammenbauen.

    In C ja. In C++ ist mehr als eine Monstervariable, weil C++ Structs auch Funktionen enthalten können und man braucht auch kein typedefs, usw.

    @DerFuchs: Willst du structs in C oder C++?



  • supertux schrieb:

    In C++ ist mehr als eine Monstervariable, weil C++ Structs auch Funktionen enthalten können...

    das heisst zwar auch 'struct' in c++, aber eigentlich sind es klassen, bei denen alles public ist. 😉



  • supertux schrieb:

    In C ja. In C++ ist mehr als eine Monstervariable, weil C++ Structs auch Funktionen enthalten können und man braucht auch kein typedefs, usw.

    Wir sind hier aber im ANSI C Forum. Sonst könnt ich jetzt auch noch anfangen zu erklären, was ein struct in C# ist 😉



  • interpreter schrieb:

    supertux schrieb:

    In C ja. In C++ ist mehr als eine Monstervariable, weil C++ Structs auch Funktionen enthalten können und man braucht auch kein typedefs, usw.

    Wir sind hier aber im ANSI C Forum. Sonst könnt ich jetzt auch noch anfangen zu erklären, was ein struct in C# ist 😉

    Der Grund warum ich C++ Structs erwähnt habe ist, weil interpreter ursprünglich in Borland C++ Forum gepostet hat, und Jansen verschob das Thread in ANSI C, obwohl es C++ sein könnte (schließlich war Borland C++ der Urpsrung)



  • supertux schrieb:

    Der Grund warum ich C++ Structs erwähnt habe ist, weil interpreter ursprünglich in Borland C++ Forum gepostet hat

    😕



  • Hi,

    Also eigentlich meinte ich auch "struct" in c++ das wahr eigentlich schon richtig. Aber so wie die erklärungen soweit sind ist es schon zu verstehen was gemeint ist das hilft mir auf jeden fall im moment weiter.

    Gruß
    DerFuchs



  • @interpreter: :p ich wusste es doch, dass er C++ gemeint hat 😃



  • @supertux,
    jo da lagst du schon ganz richtig.

    @ all
    und hier jetzt noch mal ein Dickes Lob an euch für die Nette und schnelle Hilfe danke. 👍

    Gruß
    DerFuchs



  • supertux schrieb:

    @interpreter: :p ich wusste es doch, dass er C++ gemeint hat 😃

    Dennoch habe das nie ich gefragt. 😉



  • supertux schrieb:

    In C ja. In C++ ist mehr als eine Monstervariable, weil C++ Structs auch Funktionen enthalten können und man braucht auch kein typedefs, usw.

    In C können structs ebenfalls Funktionen enthalten.

    struct foo {
         void foo(void) { printf("foo\n"); }
         int wahoo;
         };
    

    In C gibts halt dann keine Zugriffsrechte für Membervariablen.



  • /bin/bash0R schrieb:

    In C können structs ebenfalls Funktionen enthalten.

    Nein. Schauen wir mal in den C-Standard:

    $6.2.5 20 schrieb:

    A structure type describes a sequentially allocated nonempty set of member objects (and, in certain circumstances, an imcomplete array), each of which has an optionally specified name and possibly distinct type.

    $3.14 schrieb:

    object
    region of data storage in the execution environment, the contents of which can represent values



  • man könnte höchstens einen funktionspointer in einer struct unterbringen- wie jeden anderen pointer halt auch.



  • /bin/bash0R schrieb:

    In C können structs ebenfalls Funktionen enthalten.

    Tut mir leid, das ist falsch.

    rex@supertux:~> cat z.c && gcc -c z.c -ansi -Wall
    #include <stdio.h>
    
    struct foo { 
         void foo2(void) { printf("foo\n"); } 
         int wahoo; 
         };
    z.c:4: error: field `foo2' declared as a function
    z.c:4: warning: no semicolon at end of struct or union
    z.c:4: error: syntax error before '{' token
    z.c:6: error: syntax error before '}' token
    

    Die C++ structs verhalten sich anders als die C structs. In C++ braucht man kein Typedefs, man muss die Variablen nicht mit struct strname varname deklarieren und so. Structs sind einfache Klassen, bei denen die Elemente standardmäßig public sind.



  • supertux schrieb:

    Structs sind einfache Klassen, bei denen die Elemente standardmäßig public sind.

    in c++ kann man, überall wo 'class' auftaucht auch 'struct' schreiben. nur andersrum geht's nicht so einfach, weil in einer 'class' erstmal alles 'private' ist.



  • Hallo,

    deine Aussage stimmt so nicht. Oftmals wird das private einfach weggelassen, wenn man eine class benutzt, eben weil es standardmäßig privat ist. Wenn du das alles durch ein struct ersetzen würdest, wären auf einmal alle Klassenvariablen public. Es stimmt zwar, dass es funktionieren würde, aber die Kapselung wäre aufgehoben und sinnvoll ist es auf gar keinen Fall.

    Siehe dazu auch folgendes Interview:
    http://www.artima.com/intv/goldilocks3.html


Anmelden zum Antworten