Arrays



  • Wie bereits angedeutet, gibts eine direkte Verwandschaft zwischen Arrays und Zeigern.

    Anstatt:

    int x1,x2,x3,x4,x5,x6,x7,x8; schreibe ich
    int x[7];

    Liebe Grüße
    freakC++

    PS.: Zeige uns Quelltext!!!


  • Mod

    Ad aCTa schrieb:

    int *ptr = &array; // Zeiger nimmt Adresse des Elementes 0 auf
    

    &array hat den Typ int()[6] nicht int (die Adresse eines Arrays zu bestimmen, führt nicht zu Decay; selbst wenn das anders wäre, müsste das Ergebnis von &array ein int** sein). Also

    int* ptr = &array[0]; // oder
    int* ptr = array;
    


  • It0101 schrieb:

    struct Point
    {
       int x, y;
    };
    
    // Array anlegen
    Point *MeinArray = new Point[10];
    
    // Daten in das Array eintraegn
    MeinArray[0].x = 10;
    MeinArray[0].y = 11;
    
    // Array wieder löschen
    delete [] MeinArray;
    

    Du hast aber eine feste Elemente-Zahl angegeben. Das ist undynamisch, das geht besser:

    #include <vector>
    #pragma pack( 1 ) //Unter VS, wegen Alignment
    struct Vector2f
    {
    	int x, y = 0;
    };
    #pragma pop( )
    
    std::vector<Vector2f> vec2f;
    vec2f.x.push_back(12);
    vec2f.y.push_back(3);
    //...
    

    freakC++ schrieb:

    Wie bereits angedeutet, gibts eine direkte Verwandschaft zwischen Arrays und Zeigern.

    Achja, welche direkte Verwandschaft denn genau?

    Um es mal verständlicher zu machen, hier ein einfaches Beispiel:

    int 2darray[2][10];
    
    	2darray[0][0] = 10; //2darray[0] <- X
    	2darray[1][0] = 20; //2darray[1] <- Y
    
    	2darray[0][1] = 15; //2d-array[0] <- X
    	//...
    


  • vec2f.x.push_back(12);
    vec2f.y.push_back(3);
    

    kompiliert so aber nicht, eher

    vec2f.push_back(Vector2f(12,3));
    

    wenn man Vector2f noch einen passenden Konstruktor spendiert.



  • Kóyaánasqatsi schrieb:

    freakC++ schrieb:

    Wie bereits angedeutet, gibts eine direkte Verwandschaft zwischen Arrays und Zeigern.

    Achja, welche direkte Verwandschaft denn genau?

    Er meinte bestimmt die Syntax für den Zugriff auf ein Element und der/die/das "array-to-pointer decay":

    int ding[5]; 
     int *bums = ding; // array to pointer decay 
     ding[2] = 3;
     bums[2] = 3;
    

    Aber da hört es dann auch schon auf mit der Verwandtschaft.

    Gruß,
    SP



  • Sebastian Pizer schrieb:

    int ding[5]; 
     int *bums = ding; // array to pointer decay 
     ding[2] = 3;
     bums[2] = 3;
    

    Aber da hört es dann auch schon auf mit der Verwandtschaft.

    Ich persönlich finde nicht, dass es direkt etwas mit einer Verwandtschaft zu tun hat.

    KPC schrieb:

    vec2f.x.push_back(12);
    vec2f.y.push_back(3);
    

    kompiliert so aber nicht, eher

    vec2f.push_back(Vector2f(12,3));
    

    wenn man Vector2f noch einen passenden Konstruktor spendiert.

    Hm, ich muss mich entschuldigen, Korrektur:

    #include <vector>
    #pragma pack( 1 ) //Unter VS, wegen Alignment
    struct Vector2f
    {
        int x, y = 0;
    };
    #pragma pop( )
    
    std::vector<Vector2f> vec2f;
    Vector2f nVec2f;
    nVec2f.x = 10;
    nVec2f.y = 20;
    
    vec2f.push_back(nVec2f);
    //...
    


  • Du hast aber eine feste Elemente-Zahl angegeben. Das ist undynamisch, das geht besser:

    @Koya

    er fragte explizit nach Arrays und die bisherigen Erklärungen bezogen sich auch alle auf Arrays. Ich nehm auch fast immer Vector, aber ich denke es ist als Anfänger ganz gut wenn man auch weiß, was Arrays sind.



  • It0101 schrieb:

    Du hast aber eine feste Elemente-Zahl angegeben. Das ist undynamisch, das geht besser:

    @Koya

    er fragte explizit nach Arrays und die bisherigen Erklärungen bezogen sich auch alle auf Arrays. Ich nehm auch fast immer Vector, aber ich denke es ist als Anfänger ganz gut wenn man auch weiß, was Arrays sind.

    std::vector ist ein Array.



  • kann man dies auch mit datentypen umgehen?



  • Natürlich ist vector intern ein array. Aber die (C++)-Welt besteht nunmal nicht nur aus vector...



  • whaaatz schrieb:

    kann man dies auch mit datentypen umgehen?

    Was?



  • Kóyaánasqatsi schrieb:

    whaaatz schrieb:

    kann man dies auch mit datentypen umgehen?

    Was?

    kann man mehrere koordinatenwerte bzw. eine Reihe von Koordinaten mit hilfe von datentypen speichern...



  • whaaatz schrieb:

    kann man mehrere koordinatenwerte bzw. eine Reihe von Koordinaten mit hilfe von datentypen speichern...

    Klar, wenn du uns nur mal sagen würdest, wie genau du es haben möchtest. Eine Möglichkeit ist die, wie ich sie vorhin schon einmal gepostet habe:

    #include <vector>
    #pragma pack( 1 ) //Unter VS, wegen Alignment
    struct Vector2f
    {
        int x, y = 0;
    };
    #pragma pop( )
    
    std::vector<Vector2f> vec2f;
    Vector2f nVec2f;
    nVec2f.x = 10;
    nVec2f.y = 20;
    
    vec2f.push_back(nVec2f);
    //...
    

    In vec2f kannste jetzt so viel pushen wie du möchtest...
    BTW: Die Daten können nur in einem Datentypen abgelagert werden, bzw. in deren reservierten Speicher, von daher ergibt deine Frage nicht so viel Sinn.



  • Kóyaánasqatsi schrieb:

    whaaatz schrieb:

    kann man mehrere koordinatenwerte bzw. eine Reihe von Koordinaten mit hilfe von datentypen speichern...

    Klar, wenn du uns nur mal sagen würdest, wie genau du es haben möchtest. Eine Möglichkeit ist die, wie ich sie vorhin schon einmal gepostet habe:

    #include <vector>
    #pragma pack( 1 ) //Unter VS, wegen Alignment
    struct Vector2f
    {
        int x, y = 0;
    };
    #pragma pop( )
    
    std::vector<Vector2f> vec2f;
    Vector2f nVec2f;
    nVec2f.x = 10;
    nVec2f.y = 20;
    
    vec2f.push_back(nVec2f);
    //...
    

    In vec2f kannste jetzt so viel pushen wie du möchtest...
    BTW: Die Daten können nur in einem Datentypen abgelagert werden, bzw. in deren reservierten Speicher, von daher ergibt deine Frage nicht so viel Sinn.

    struct ist ja auch ein Datentyp, der mehrere Variablen gleichen oder verschiedenen Typs zu einem neuen Datentyp zusammenfasst.



  • Ich habe mir z.b jetzt vorgenommen, dass ich eine Abfrage von drei Wurfkoordinaten (x und y) und dies speicher in struktur. (Datentyp struct)

    Ausgaben dann sollte erneut:
    Beispiel

    Wurf 0:
    x: 9
    y: 8

    Wurf 1:
    x: 4
    y: 7

    Wurf 2:
    x: 3
    y: 5

    die x und y sind immer wieder veränderbar in der console aber wurf 0,1,2 sind fest gegeben.

    😕 😕 😕 😕



  • Äh? Zeig mal deinen Code.



  • hallo,
    noch kurz zu meinem Beitrag. Ich meinte es so, wie SP es erklärt hat. Vielleicht war das Wort "Verwandschaft" schlecht gewählt...

    lg, freakC++



  • Kóyaánasqatsi schrieb:

    Äh? Zeig mal deinen Code.

    habe noch nicht angefangen, da ich stuct gar nicht gut verstehe 😕

    ich will das so programmieren, sodass die ausgage:

    wurf0 ( fest)
    x: ( veränderbar nach compiliernen) /cin >>
    y: "

    wurf1:
    x:
    y:
    .
    .
    .
    .

    und nachdem ich das letzte mal enter gedrückt habe kommt z.b

    "deine Koordinaten sind:"

    Wurf 0:
    x: 9
    y: 8

    Wurf 1:
    x: 4
    y: 7

    Wurf 2:
    x: 3
    y: 5

    und dies mit "struct"
    ich glaube ich bin zu alt um C++ zu lernen 😞

    kann mir da jemand helfen?



  • Warum bin ich eigtl der erste, der den Sinn dieser Zeile hier in Frage stellt:
    #pragma pack( 1 ) //Unter VS, wegen Alignment
    Ist doch (hier) völlig unerheblich...

    bb


Anmelden zum Antworten