Zeiger



  • Hallo.
    Ich hab da ein kleines Verständnisproblem:
    wenn ich float *Feld deklariere, dann kann ich, ohne davor Feld = new float[XYZ] zu schreiben, auf Feld[0],Feld[1],Feld[2],Feld[...] zugreifen, und nichts passiert. Wenn allerdings "Feld" kein "float*", sondern ein "MeineStruktur*" wäre, dann ginge das nicht, sondern das Programm stürzt ab. Wieso?

    Oder wenn ich meine eigenen Strukturen habe:

    struct A
    {
    int a,b,c;
    B *structB[2]
    }
    
    struct B
    {
    int x,y,z;
    int Flags;
    ...
    }
    

    Kann ich dann auf A.structB[0] zugreifen, ohne davor A.structB[0] = new B; zu schreiben? Es müsste doch eigentlich gehen, weill man new doch nur braucht, um ein Feld (also mehr als 1 Elemente) zu erzeugen. Oder?



  • Perk schrieb:

    wenn ich float *Feld deklariere, dann kann ich, ohne davor Feld = new float[XYZ] zu schreiben, auf Feld[0],Feld[1],Feld[2],Feld[...] zugreifen, und nichts passiert. Wenn allerdings "Feld" kein "float*", sondern ein "MeineStruktur*" wäre, dann ginge das nicht, sondern das Programm stürzt ab. Wieso?

    Das nennt man undefiniertes Verhalten - Du kannst nicht vorhersagen was passiert. Gültig ist beides nicht.

    Kann ich dann auf A.structB[0] zugreifen, ohne davor A.structB[0] = new B; zu schreiben? Es müsste doch eigentlich gehen, weill man new doch nur braucht, um ein Feld (also mehr als 1 Elemente) zu erzeugen. Oder?

    Nein, Du musst Zeigern immer gültigen Speicher zuweisen bevor Du drauf zugreifen darfst. Ob das allerdings via malloc geschieht oder ob Du einen Zeiger auf ein gültiges Objekt nimmst, ist widerum egal.

    Und nebenbei: In ANSI C gibt es kein new 😉



  • Ok, gut danke.

    Heißt das,wenn ich nur über Zeiger zugreifen will, kann ich schreiben

    MeineStruktur *Zeiger;
    MeineStruktur Ins;
    Zeiger = &Ins;
    

    oder

    MeineStruktur *Zeiger;
    Zeiger = new MeineStruktur;
    bzw.
    Zeiger = new MeineStruktur[Anzahl];
    

    ?



  • ja.

    Aber new ist C++ ...



  • rüdiger schrieb:

    Aber new ist C++ ...

    und java und c# und...
    im C kannste 'malloc' nehmen, hat 'nen ähnlichen effekt...
    🙂



  • ten schrieb:

    rüdiger schrieb:

    Aber new ist C++ ...

    und java und c# und...

    ja, aber die nix Zeiger



  • rüdiger schrieb:

    ja, aber die nix Zeiger

    doch, c# hat auch zeiger.
    und java versteckt sie vor'm user. heissen da 'referenzen' sind aber das gleiche...
    🙂



  • Aber das interessiert hier, mit Verlaub, keine Sau.



  • TactX schrieb:

    Aber das interessiert hier, mit Verlaub, keine Sau.

    es kann nie schaden, mal über den eigenen tellerrand zu gucken...
    🙂



  • Tellerrand schön und gut, aber wenn dann in "Rund um die Programmierung". Aber man sieht ja, was dort aus Tellerranddiskussionen wird 😉


Anmelden zum Antworten