Problem mit struct (Sorry irgendwie doppelt reingerutscht)



  • Hallo,

    wo ist zwischen den Beispielen der Unterschied und habe ich im zweiten
    Beispiel schon eine Instanz im Header erzeugt?

    //Header
    typedef struct
    {
    unsigned long a;
    unsigned long b;
    unsigned long c;
    }TpdoParameter;

    //C Modul
    TpdoParameter Index1800; Instanzen erzeugen
    TpdoParameter Index1801; ..............

    //Header
    struct TpdoParameter
    {
    unsigned long y;
    unsigned long x;
    unsigned long l;
    };

    //C Modul
    struct TpdoParameter Index1800; Instanzen erzeugen
    struct TpdoParameter Index1801; ..................



  • Ich würde sagen,
    da gibt es keinen Unterschied.
    In beiden Beispielen legst du fest,
    wie die Struktur aussieht.

    Erst mit der Objekterzeugung in main
    wird Speicher belegt!



  • im 1. beispiel kannst du von TpdoParameter ohne explizites struct instanzen erzeugen:
    TpdoParameter t;
    wobei in der definition der struktur keine instanz erzeugt wird sondern nur ein typedef angelegt wird.

    im 2. beispiel musst du struct noch mit angeben:
    struct TpdoParameter2 t2;

    es kommt auf das vorstehende typedef an ob instanzen oder typenamen erzeugt werden.



  • was soll dann aber fogendes Beispiel (auf der Microsoft homepage)

    struct PERSON // Declare PERSON struct type
    {

    int age; // Declare member types

    long ss;

    float weight;

    char name[25];

    } family_member; // Define object of type PERSON

    int main()

    {

    struct PERSON sister; // C style structure declaration

    PERSON brother; // C++ style structure declaration

    sister.age = 13; // assign values to members

    brother.age = 7;

    }

    Warum wird hier schon eine Instanz family_member erzeugt, die dann nie
    verwendet wird, ausser wenn das ganze im Header steht bei jedem includieren
    speicher verbraucht wird?
    Ich findet das ist mal wieder ein Beispiel was mehr verwirrt als das es hilft.



  • hermes schrieb:

    Warum wird hier schon eine Instanz family_member erzeugt, die dann nie
    verwendet wird

    Vielleicht um zu zeigen, dass es möglich ist? Du solltest nicht allzu viel in solche Codeschnipsel reininterpretieren. Bei Game Engines würde man wohl sagen, das ist einfach nur 'ne Tech-Demo.



  • Stehen eigentlich bei jedem Compiler die Struct Members immer der reihe
    nach im Speicher?

    typedef struct
    {
    unsigned char a; //-> Adresse 0
    unsigned char b; //-> Adresse 1
    unsigned char c; //-> Adresse 2
    }TpdoParameter;

    Oder gibt es da Unterschiede.



  • hermes schrieb:

    Stehen eigentlich bei jedem Compiler die Struct Members immer der reihe
    nach im Speicher?

    Ja.


Anmelden zum Antworten