2-D Array als PointerPointer??



  • MaBa schrieb:

    static float** matrix = new float*[2];
    

    Was ist denn das?

    Manchmal kommt mir vor, ich sage nichts anderes mehr.



  • In C99 geht Folgendes:

    #include <stddef.h>
    #include <stdio.h>
    #include <stdlib.h>
    
    void printMatrix(size_t size, float (*pmatrix)[size]);
    
    int main(void) {
      static float matrix[2][2] = { {1.2f, 1.3f}, {3.2f, 4.5f}};
      int size = 2;
    
      printMatrix(size, matrix);
    
      return 0;
    }
    
    void printMatrix(size_t size, float (*pmatrix)[size])
    {
      size_t x, y;
      for(y = 0; y < size; y++) {
        printf("\n");
        for(x = 0; x < size; x++) {
          printf("%f ", pmatrix[x][y]);
        }
      }
    }
    

    Wenn dein Compiler C99 nicht kann (etwa MSVC), wirst du die Adressierung wohl von Hand machen müssen (float *pmatrix; ... pmatrix[x * size + y]).

    Es ist wichtig zu verstehen, dass ein zweidimensionales Array ein Array von Arrays ist und kein Array von Zeigern.



  • static float** matrix = new float*[2];

    Ist das in Brainfuck geschrieben?



  • Doppelpointer finde ich jetzt nicht sooo ungewöhnlich. Das 2D-Array wird im Beispiel als Pointer auf einen Pointer erzeugt.

    Dynamisch könnte es so aussehen:

    float** matrix;
    matrix= new float*[cols];
    for (int loop = 0; loop < cols; loop++)
    matrix[loop] = new float[rows];
    


  • MaBa schrieb:

    Doppelpointer finde ich jetzt nicht sooo ungewöhnlich.]

    Schlecht geschlafen oder generell etwas verwirrt? Die Doppelpointer findet keiner schlimm, aber kein C-Compiler versteht deinen Code.
    🙂



  • Huch! Falsches Forum... Asche über mein Haupt.



  • MaBa schrieb:

    Huch! Falsches Forum... Asche über mein Haupt.

    Mach dir nichts daraus, passiert jedem hin und wieder.

    Fletscher2: MaBa's Vorschläge kannst du in C umsetzen, indem du man: malloc statt new verwendest.



  • Ein 2D-Feld so wie du es definiert hast ist kein PointerPointer.

    matrix entspricht der Adresse vom ersten Element [0][0] -> also nur ein einfacher Pointer.



  • Alles klar!
    Tausend Dank an euch!

    Gruß
    Fletscher



  • DirkB schrieb:

    Ein 2D-Feld so wie du es definiert hast ist kein PointerPointer.

    matrix entspricht der Adresse vom ersten Element [0][0] -> also nur ein einfacher Pointer.

    Unsinn. Ein Array ist kein Zeiger, ob es nun 1 oder mehrdimensional ist. Ausschließlich als Array deklarierte Funktionsargumente der 1. Dimension sind implizit Zeiger.



  • Wutz schrieb:

    Ein Array ist kein Zeiger,...

    Habe ich auch gar nicht behauptet. 🙂

    Wutz schrieb:

    Ausschließlich als Array deklarierte Funktionsargumente der 1. Dimension sind implizit Zeiger.

    Mit 'entspricht' meinte ich jenen Fall. (Nur nicht so schön ausgedrückt. 😞 )


Anmelden zum Antworten