Δημοσιεύτηκε: 13 Μαρ 2012, 22:38
Έχω μια απορία σχετικά με την pointer arithmetic.
Έχω το παρακάτω sample που τυπώνει δύο φορές την διεύθυνση στην μνήμη των στοιχείων μιας array:
Μια output που παίρνω είναι:
Παρατηρώ ότι η διεύθυνση της μνήμης αυξάνεται κατά 4 μονάδες (;) στο δεκαεξαδικό σύστημα.
Γιατί συμβαίνει αυτό; Έχει να κάνει με το ότι ο τύπος int στο σύστημα μου καταλαμβάνει 4 bytes;
Αυτό που κυρίως δεν μπορώ να καταλάβω είναι πως καταλαβαίνει και μεταφράζει ο compiler την έκφραση p++ όταν η μεταβλητή p είναι pointer και δείχνει σε κάποιο στοιχείο μιας array. Τι ακριβώς του λέει αυτή η εντολή;
"Άλλαξε την διεύθυνση μνήμης σε αυτήν που είναι τώρα συν τόσες μονάδες (;) όσος και ο αριθμός των bytes που καταλαμβάνει ο τύπος της array στην οποία δείχνεις";
Έχω το παρακάτω 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 στην οποία δείχνεις";