Zugriff auf mehrdimensionales Array über Zeiger
-
Hallo zusammen, ich habe folgendes Prog:
ich habe mehrere Matritzen, mehrdimensional:
int matrix_1[10][2];
int matrix_2[10][2];
int matrix_2[10][2];und möchte SCHREIBEND drauf zugreifen über einen Zeiger:
int (*pMatrix)[2];
mit dem Adressoberator & klappt das nicht (was ja auch irgendwie logisch ist
...also so funzt das nicht:(*pMatrix)[2]=&matrix_1;
also wie???
Danke im voraus
-
int **P = &matrix_1;
p[1][0] = 12;
-
Hallo nochmal..
float **mZuordnung; // Zeiger auf die Matritze
float mZuordnungZT1[STEPS_ZT1][2]; // Matritze für ZT1
(...)
mZuordnung=&mZuordnungZT1;
ODER **mZuordnung=&mZuordnungZT1;
ergibt ne Fehlermeldung:
error C2440: '=' : 'float (*)[1500][2]' kann nicht in 'float ** ' konvertiert werden
-
SirLant schrieb:
int **P = &matrix_1;
p[1][0] = 12;
Groß-Klein-Schreibung beachten.
@Frinkenstein
Bei der Zuweisung musst du die ** weg machen, dann sollte es gehen. Mit den Sternen verweist du ja bereits auf die Speicheradresse, auf die der Zeiger zeigt.
-
also ich habs nochmal versucht, bleibt aber dabei:
[
void main()
{
int i, j, a;
int matrix[10][2];
int **p;for (i=0; i<10;)
{
for (j=0; j<2; j++);
{
a=(i*10+j);
matrix[i][j]=a;printf("[%i][%i]: %i ", i, j, matrix[i][j]);
}
printf("\n");
i++;
}p = &matrix;
p[3][1]=123;
}]
verursacht den Fehler
error C2440: '=' : 'int (*)[10][2]' kann nicht in 'int ** ' konvertiert werden
Die Typen, auf die verwiesen wird, sind nicht verwandt; die Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat
-
Mach mal das & vor matrix weg.
-
Hoppla da ist wohl einer (ich
) zu lange auf shift gewesen
-
void main() { int i, j, a; int matrix[10][2]; int **p; for (i=0; i<10;) { for (j=0; j<2; j++); { a=(i*10+j); matrix[i][j]=a; printf("[%i][%i]: %i ", i, j, matrix[i][j]); } printf("\n"); i++; } p = matrix; p[3][1]=123; }
führt auch zu einer Fehlermeldung:
rror C2440: '=' : 'int [10][2]' kann nicht in 'int ** ' konvertiert werden
Die Typen, auf die verwiesen wird, sind nicht verwandt; die Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat
Fehler beim Ausführen von cl.exe.kann es sein das ich nen (Zeilen)Pointer auf ein 1-D Array mit Pointern auf die folgenden Spalten setzen muss???
-
Frinkenstein schrieb:
kann es sein das ich nen (Zeilen)Pointer auf ein 1-D Array mit Pointern auf die folgenden Spalten setzen muss???
Mehr sollte **p eigentlich nicht sein, wenn ich das richtig verstanden habe, was du mit diesem Satz meinst.
Du musst anscheinend einen Cast machen, damit der Compiler es akzeptiert. Also:
p = (int **) matrix;
Habs extra ausprobiert, obs auch geht.
-
was du vllt. versuchen könntest wäre p = &matrix[0][0], aber ka ob er das so dann akzeptiert
-
1. Eine zweidimesionale Matrix ist was anderes als ein Zeiger auf einen Zeiger.
2. Du kannst nicht mehrere oder alle Arrayelemente mit einer = Zuweiseung kopieren.
-
Mein Compiler nimmt es auch nicht ohne den Cast, aber du benötigst ein **p damit
du den danach wie ein Array manipulieren kannst.