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.


Anmelden zum Antworten