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.


Anmelden zum Antworten