Referenzproblem bei multi-dimensionen Arrays



  • Hallo liebe Wissende,
    ich habe ein (hoffentlich triviales) Problem beim referenzieren eines multidimensionalen (nicht festgelegten) Arrays. z.B:

    int array3D[][][];
    

    Auf diesen möchte ich in einem Objekt eine Referenz setzen können und mit dieser arbeiten. Beim 1-dimensionalen Array ist das an sich ja kein Problem. z.B:

    int array1D[1] = 1234;
    int *referenz_pointer = array1D;
    
    cout << referenz_pointer[0]; // Ausgabe: 1234
    

    Bei einem multi-dimensionalen Array sähe das vielleicht irgendwie so aus:

    int array3D[][][]={{1,2,3}};
    int  *referenz_pointer= array3D;
    // Erzeugt natürlich Compilerfehler
    

    array3D ist ja auch ein Pointer, aber ich bekomme die nötige "Ansteuerung" nicht hin.
    😞
    Kann mir jemand helfen?

    mfg, KingLouie & allseits fröhliche Feiertage 🤡



  • KingLouie schrieb:

    Bei einem multi-dimensionalen Array sähe das vielleicht irgendwie so aus:

    int array3D[][][]={{1,2,3}};
    int  *referenz_pointer= array3D;
    // Erzeugt natürlich Compilerfehler
    

    array3D ist ja auch ein Pointer, aber ich bekomme die nötige "Ansteuerung" nicht hin.

    Also erstmal fehlen dort die Arraydimensionen. Du kannst immer nur die am weitesten Links stehende Dimension weglassen. Alle anderen musst du angeben.

    Desweiteren ist es zwar richtig, dass ein Array (auch ein multidimensionales) in den meisten Kontexten als Pointer auf erstes Element betrachtet werden kann, aber für ein multidimensionales Array ist ein Pointer auf das erste Element eben kein Pointer auf Basistyp (hier int*) sondern ein Pointer auf Array.

    Sprich:

    // 1-dimensionales Array
    int arr[] = {1,2,3};
    int* p = arr;
    p[0] =  42;
    
    // 2-dimensionales Array
    int arr[][2] = {{1,2},{1,2}};
    int (*p)[2] = arr; // p ist Pointer auf Array von int
    p[0][0] = 42;
    
    // 3-dimensionales Array
    int arr[][2][2] = {{{1,2},{1,2}}};
    int (*p)[2][2] = arr; // p ist Pointer auf zweidimensionales Array von int
    p[0][0][0] = 42;
    

    Für ein n-Dimensionales Array ist der Pointer auf erstes Element also immer n-1-Dimensional, wobei du immer allle bis auf die erste Dimension angeben musst.


Anmelden zum Antworten