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. )