Δημοσιεύτηκε: 13 Μαρ 2012, 22:38
από Ilias95
Έχω μια απορία σχετικά με την pointer arithmetic.

Έχω το παρακάτω sample που τυπώνει δύο φορές την διεύθυνση στην μνήμη των στοιχείων μιας array:
Μορφοποιημένος Κώδικας: Επιλογή όλων
#include <stdio.h>

int main(void)
{
int x[5] = {1, 12, 45, 64, 5}, *p;

printf("%p\n", &x[0]);
printf("%p\n", &x[1]);
printf("%p\n", &x[2]);
printf("%p\n", &x[3]);
printf("%p\n", &x[4]);
puts("");

for (p = x; p < x + 5; p++)
printf("%p\n", p);

return 0;
}

Μια output που παίρνω είναι:
Κώδικας: Επιλογή όλων
0xbfe51e48
0xbfe51e4c
0xbfe51e50
0xbfe51e54
0xbfe51e58

0xbfe51e48
0xbfe51e4c
0xbfe51e50
0xbfe51e54
0xbfe51e58


Παρατηρώ ότι η διεύθυνση της μνήμης αυξάνεται κατά 4 μονάδες (;) στο δεκαεξαδικό σύστημα.
Γιατί συμβαίνει αυτό; Έχει να κάνει με το ότι ο τύπος int στο σύστημα μου καταλαμβάνει 4 bytes;

Αυτό που κυρίως δεν μπορώ να καταλάβω είναι πως καταλαβαίνει και μεταφράζει ο compiler την έκφραση p++ όταν η μεταβλητή p είναι pointer και δείχνει σε κάποιο στοιχείο μιας array. Τι ακριβώς του λέει αυτή η εντολή;

"Άλλαξε την διεύθυνση μνήμης σε αυτήν που είναι τώρα συν τόσες μονάδες (;) όσος και ο αριθμός των bytes που καταλαμβάνει ο τύπος της array στην οποία δείχνεις"; :problem: