Auf Elemente eines mehrdimensionalen Arrays mithilfe von Pointern zugreifen



  • Hi!

    Mir ist nicht klar, warum bei folgendem code 2 mal auf das gleiche element des arrays zugegriffen wird, denn die adressen werden auf 2 unterschiedliche arten berechnet.
    Beim ersten mal wird zuerst der pointer 1 mal dereferenziert, dann wird ein offset zur adresse hinzugezählt und dann wird das zweite mal dereferenziert.
    Beim zweiten mal wird zuerst ein offset (in eine dimension) hinzugezählt, dann wird dereferenziert, der zweite offset (zur zweiten dimension) wird hinzugezählt und dann wird nocheinmal dereferenziert. durch beide arten greift man anscheinend auf denselben speicherbereich zu, aber warum ist das so?

    int a[10][10];
    	int i, j, e;
    	for (i = 0; i < 10; i++)
    		for (j = 0; j < 10; j++)
    			a[i][j] = i*10 + j;	
    
    	e = *(*a + 10*3 + 2);
    	printf("element: %d\n", e);
    
    	e = *(*(a + 3) + 2);
    	printf("element2: %d\n", e);
    

    lg, mocky



  • weil das die gleiche adresse ist 😉 weil du ein int[irgendwas][10]-array hast, rechnet der compiler bei *a+x den offset vom xsizeof(int)*'ten element aus und bei *(a+x) den offset vom 10*x*sizeof(int)'ten element. was aber noch ätzender ist: bei sowas ist die adresse von 'a' gleich der von '*a'. also besser mit array-indexen darauf zugreifen, dann gibt's keine verwirrung.
    🙂


Anmelden zum Antworten