Dynamisches struct



  • Moin,
    ich hab folgendes Problem:
    Ich erstelle ein dynamisches Array von Strukturen:

    struct foo
    {
     int a;
     int b;
     int c;
    };
    
    foo* pfoo = new foo[20];
    

    Nun bräuchte ich die Adresse von einer der Komponenten(a,b,c). Geht das einfach über

    &(pfoo[0].a)
    

    oder übergibt er mir hierbei "zufällig" die Anfangsadresse des structs, weil pfoo ja eigentlich nur ein zeiger auf ein foo ist? Wenn ja, wie komme ich an die Adresse der einzelnen Komponenten?



  • Nein, das ist so schon richtig.



  • #include <vector>
    
    struct item
    {
        int x;
        int y;
        int z;
        item(int x = 0, int y = 0, int z = 0)
            : x(x), y(y), z(z)
        {}
    };
    
    int main()
    {
        std::vector<item> data(4);
        // jetzt Zeiger auf Membervariable x des 1. Elementes von data:
        int* ptr_x = &(data[0].x);
    }
    


  • struct item
    {
        int x;
        int y;
        int z;
        item(int x = 0, int y = 0, int z = 0)
            : x(x), y(y), z(z)
        {}
    };
    
    int main()
    {
        std::vector<item> data(4);
        // jetzt Zeiger auf Membervariable x des 1. Elementes von data:
        int* ptr_x = &(data[0].x);
    }
    

    [quote ="(D)evil"]
    Vielen Dank erstmal für den Code. Heißt das jetzt doch, dass meine Variante nicht die Richtige war?



  • Doch die war in Ordnung 😉 Wir sind hier nur im C++-Forum, von d.h. kann man hier auch die Vorteile von Konstruktoren nutzen. std::vector ist ein Container-Typ des Standards und kümmert sich für dich darum, dass der Speicher aufm Heap reserviert wird usw. Du kannst ihn wie einen normalen Array nutzen! (und dich nichtmehr um Speicherfreigabe usw. kümmern!).



  • Alles klar. Aber ich werd mir das mit den Containern nochmal angucken müssen, bevor ich es verwende :D. Vielen Dank nochmals


Anmelden zum Antworten