Doppelpointer Arrayadresse übergeben
-
Hallo,
was ist daran falsch und warum?
unsigned long Memory[100][2]; void test() { unsigned long **matrix; int i, j; matrix = (unsigned long **)&Memory[100]; for (i = 0; i < 100; i++) { matrix[i] = (unsigned long *)&Memory[i][2]; } for (i = 0; i < 100; i++) for (j = 0; j < 2; j++) matrix[i][j] = i + j; for (i = 0; i < 100; i++) for (j = 0; j < 1; j++) printf("%d %d \n", i, matrix[i][j]); }
-
Memory ist kein Zeigerarray. Außerdem ist Memory[100] außerhalb von Memory (und das dahinterliegende Zeug natürlich auch).
Meinst du vielleicht
unsigned long (*memory)[2] = Memory;
?
-
Danke.
Ich meinte:
unsigned long Memory[100][2]; unsigned long *temp[100]; void test() { unsigned long **matrix; int i, j; matrix = (unsigned long **)&temp; for (i = 0; i < 100; i++) { matrix[i] = (unsigned long *)&Memory[i][2]; } for (i = 0; i < 100; i++) for (j = 0; j < 2; j++) matrix[i][j] = i + j; for (i = 0; i < 100; i++) for (j = 0; j < 1; j++) printf("%d %d \n", i, matrix[i][j]); }
-
Vielleicht solltest du verbal vorab äußern, was du mit deinem Code erreichen willst.
Falls du die Memory-Matrix indirekt spalten/zeilenweise bearbeiten willst, könnte es z.B. so gehen:unsigned long Memory[100][2]; unsigned long (*zeigerSpalte)[2]; void test() { int i, j; zeigerSpalte = &Memory[0]; /* äquivalent zu "zeigerSpalte = Memory;" */ for (i = 0; i < 100; i++) { *zeigerSpalte[i] = Memory[i][1]; } for (i = 0; i < 100; i++) for (j = 0; j < 2; j++) zeigerSpalte[i][j] = i + j; for (i = 0; i < 100; i++) for (j = 0; j < 1; j++) printf("%d %d \n", i, zeigerSpalte[i][j]); }
-
Ich möchte das aber mit einem Doppelpointer machen.