Zeiger auf int Array



  • Hallo! Wie macht man eigentlich einen Zeiger auf ein mehrfaches Integer Array?

    int array[3][3];
    
        int *a[][] = &array;
    

    Dieses Konstrukt funktioniert irgendwie nicht ...


  • Administrator

    Ein Zeiger auf ein Array geht so:

    int array[3][3];
    
    int (*p1)[3][3] = &array;
    

    Aber ich denke du willst eher einen Zeiger auf das erste Elements des Arrays:

    int array[3][3];
    
    int* p2 = &array[0][0];
    

    Grüssli



  • Dravere schrieb:

    Ein Zeiger auf ein Array geht so:

    int array[3][3];
    
    int (*p1)[3][3] = &array;
    

    Aber ich denke du willst eher einen Zeiger auf das erste Elements des Arrays:

    int array[3][3];
    
    int* p2 = &array[0][0];
    

    Grüssli

    Wo ist da der Unterschied?
    Ich dachte beide Zeiger zeigen dann auf das erste Element.

    Noch eine Frage. Im ersten Beispiel ist die Größe vom Array angegeben.
    int (*p1)[3][3]
    kann man keine Zeiger deklarieren, deren Größe noch unbestimmt ist, also in etwa so:
    int (*p)[][];
    ?



  • kann man keine Zeiger deklarieren, deren Größe noch unbestimmt ist, also in etwa so:
    int (*p)[][];

    Das wäre die andere Variante, die Dravere vorgeschlagen hat. Da ist es unbestimmt.



  • drakon schrieb:

    kann man keine Zeiger deklarieren, deren Größe noch unbestimmt ist, also in etwa so:
    int (*p)[][];

    Das wäre die andere Variante, die Dravere vorgeschlagen hat. Da ist es unbestimmt.

    Du meinst das hier?

    int* p2 = &array[0][0];
    

    Woher weiß ich dann wie groß das Array p2 ist?
    Muss ich das in einer anderen Variablen speichern?


  • Administrator

    Neuling09 schrieb:

    Wo ist da der Unterschied?
    Ich dachte beide Zeiger zeigen dann auf das erste Element.

    Der Unterschied liegt darin, dass ein Array auch ein Datentyp ist. Man kann diesen Datentyp zwar nicht kopieren, aber eine Referenz oder einen Zeiger kann man dafür erstellen. Wenn du das folgende machst:

    int arr[3];
    
    int* p = arr;
    

    Dann geschieht eine implizite Konvertierung vom Array Datentyp zu einem Zeiger vom Typ int* , welcher auf das erste Element des Arrays zeigt. Aber dahinter steckt eine implizite Konvertierung! Die Variable arr ist kein Zeiger, sondern ein Array.

    Der Typ eines Arrays ist von seinen Dimensionen abhängig, daher kann man da nicht einfach auf ein dimensionsloses Array zeigen, sondern muss über die implizite Konvertierung gehen. Also dass man einen Zeiger auf das erste Element nimmt. Dabei gehen aber logischerweise alle Informationen über das Array verloren und man muss diese separat mitführen.

    Grüssli



  • Ich möchte aber Zeiger auf mehrdimensionale Arrays haben und das hier funktioniert so nicht:

    int a[2][2];
    int* p = a;
    

    Ok sorry. War jetzt nur auf den letzten Beitrag fixiert ...

    Jedenfalls danke für die Antworten. Ich glaube ich blicke nun etwas besser durch



  • Man kann auch Referenzen einsetzen, analog zu dem Zeiger auf das gesamte Array. Bei folgendem Code kann Ref genau wie das Array selber behandelt werden.

    int Array[3][3];
    int (&Ref)[3][3] = Array;
    

Anmelden zum Antworten