Deklaration und Definition bei Strukturen



  • hallo wieder einmal!
    so langsam lohnt es sich hier anzumelden 😃

    folgendes problem:

    typedef struct
        {
            char name[20];
            char strasse[20];
            int hausnummer;
            int plz;
            char ort[20];
    
        } Adresse;
    
    int main(void) 
    {
        Adresse meineAdresse;
        meineAdresse = {"Hans Mueller", "Musterstrasse", 24, 12345, "Musterstadt"};
    }
    

    mit meinem (strukur)datentyp Adresse erstelle ich eine variable namens meineAdresse, die wiederum die strukturelemente beinhaltet.
    das oben geht nicht. damit es geht müsste ich es so ändern, was ich aber nicht verstehe:

    Adresse meineAdresse = {"Hans Mueller", "Musterstrasse", 24, 12345, "Musterstadt"};
    

    wenn ich aber eine variabledeklaration und anschließende initialisierung (1. beispiel) mache, gehts nicht. warum?
    wenn ich normale int variablen nehme, gehts ja auch:

    int variable;
    variable = 7;
    //ist ja völlig identisch mit:
    int variable = 7;
    

    dann meinte ein kumpel das er dachte, dieses problem is ja wie bei pointern.
    da war irgendwas. das problem hatte ich beim lernen auch mal bemerkt.
    alles in einer zeile ging irgendwie nicht, w.z.b.:

    int var;
    int *pointer = &var;
    

    ich glaube zu wissen, das dies so aussah. hatte es dann wie folgt:

    int var;
    int *pointer
    pointer = &var;
    

    zweiteres ging auf jeden fall und ersteres war glaub ich fehlerhaft.

    also wie gesagt... das beispiel mit structs verstehe ich nicht. wenn das so programmiersyntax und konform und/oder beabsichtigt ist, dann darf ich das in meiner klausur nicht verhauen. andernfalls helft ihr mir bestimmt wieder einmal 😉

    besten dank wie immer!
    gruß norben



  • kleiner edit:

    [code="c"]
    int var;
    int pointer*;**
    pointer = &var;
    [/code]

    der strichpunkt fehlte natürlich beim tippen



  • und dann hatte ich ja noch eine zweite frage bzgl. der strukturen 😃

    typedef struct
        {
            char name[20];
            char strasse[20];
            int hausnummer;
            int plz;
            char ort[20];
    
        }Adresse;
    
    void printAdresse(Adresse adresse);
    int main(void) 
    {
        Adresse meineAdresse;
        meineAdresse = {43, 95030};     //Fehler aus 1. Post halt
    }
    

    in meinem 1200 seiten kompendium steht, dass es nicht erforderlich sei elemente der struktur zu initialiseren.

    gesetz dem fall ich kenne z.b. die "hausnummer" meiner elemente nicht.
    diese werden ja dann mit 0 initialisiert. ABER: wie? 😃
    wenn ich es so schreibe, kommt ein fehler:

    Adresse meineAdresse = {"Hans Mueller", "Musterstrasse", 12345, "Musterstadt"};
    

    hier fehlet jetzt der eintrag für die hausnummer. folge: fehler.
    folgendes geht aber auch nicht:

    Adresse meineAdresse = {"Hans Mueller", "Musterstrasse", , 12345, "Musterstadt"};
    


  • Norben schrieb:

    wenn ich normale int variablen nehme, gehts ja auch

    Die Lösung ist ganz einfach: Eine struct ist kein int.

    Du kannst bei der Definition ein struct initialisieren.
    Da darfst du Elemente am Ende weglassen, aber nicht zwischendurch.

    Aber die Zeit ist nicht stehen geblieben. Es gibt die Möglichkeit (seit C99), dass du die Element mit angibst.

    Adresse meineAdresse = { .hausnummer = 43, .plz = 95030};
    

    Ansonsten alles einzeln:

    strcpy(meineAdresse.name, "Norben");
    strcpy(meineAdresse.strasse, "Christian-Ritter-von-Langheinrich-Straße"); // Ups zu lang
    meineAdresse.hausnummer = 20a;  // Ist das eine Hexzahl?
    meineAdresse.plz = 01067;        // Macht etwas anderes als du denkst
    strcpy(meineAdresse.ort, "Dresden");
    


  • DirkB schrieb:

    Du kannst bei der Definition ein struct initialisieren.

    kannst heißt ja nicht musst.
    ich schlussfolgere mal und sage das meine idee nicht funktioniert!?
    also dieses beispiel hier:

    Adresse meineAdresse;
    meineAdresse = {43, 12345};
    

    ok. einzeln und/oder das letzte weglassen ergibt sinn bzgl. der elemente im struct und initialisierung mit 0 😃

    DirkB schrieb:

    meineAdresse.hausnummer = 20a;  // Ist das eine Hexzahl?
    

    2A vielleicht

    DirkB schrieb:

    meineAdresse.plz = 01067;        // Macht etwas anderes als du denkst
    

    erster gedanke: er lässt die "0" weg.
    wie in einer zelle bei excel:
    definiert als zahl = 1067
    definiert als text = 01067
    habs gerade mal getestet. dem ist aber nicht ganz so. bin gerade überfragt 😕

    DirkB schrieb:

    strcpy(meineAdresse.ort, "Dresden");
    

    du wohnst in dd? 🙂



  • Norben schrieb:

    kannst heißt ja nicht musst.

    So war das gemeint.
    Du kannst diese Art Zuweisung bei der Definition machen.
    Woanders geht es nicht.

    Die Beispiele mit der Hausnummer und Postleitzahl sollten dir nur zeigen, dass ein int dafür der falsche Datentyp ist.

    Eine führende Null leitet eine oktal Zahl ein (Basis 😎

    01067 ist die Postleitzahl von Dresden. Die erste die ich mit führender Null gefunden habe 😃



  • der dirk...
    ich sollte dich adden 😃 👍
    dank dir wieder einmal und bis die tage, wenn ich wieder auf ein problem stoße 🙂



  • Es gibt noch diese Möglichkeit:

    Adresse adr;
    adr = (Adresse){.name = "Hans", .hausnummer = 9, .plz = 50224};
    

Anmelden zum Antworten