2 Dimensionales Array und Pointer auf Pointer



  • Hallo zusammen, ich habe eine kurze Frage in C:

    int matrix[3][3] = {{1,2,3}, {4,5,6}, {7,8,9}};
    
    // Ich dachte ich weise hier **ppmatrix die (start)Adresse von matrix zu
    **ppmatrix = matrix;
    
    // Die Ausgabe sollte (normalerweise die Position [0][0] von ppmatrix liefern:
    printf("**ppmatrix: %d", **ppmatrix); // Segmentation Fault
    

    Lieder funktioniert das so nicht. Aber wieso? Sollte nicht zumindest die Ausgabe der ersten Position von matrix korrekt sein?



  • Ein 2D-Feld wie int matrix[3][3] ist kein Doppelpointer.
    Zwischen

    int matrix2[3][3] = {{1,2,3}, {4,5,6}, {7,8,9}};
    // und
    int matrix1[3*3]  = { 1,2,3 ,  4,5,6 ,  7,8,9 };
    

    ist im Speicher kein Unterschied.

    Darum

    int *ppmatrix = matrix;
    printf("*ppmatrix: %d", *ppmatrix);
    

    Es gibt auch Arrays von Pointern auf Variablen (zb. argv).
    Das sind dann deine Doppelpointer. Die kann man auch über die Array-Schreibweise mit den [] ansprechen.

    Die werden aber anders definiert.


Anmelden zum Antworten