Η διαφορά ειναι βασική και μεγάλη... Για να δεικτοδοτήσεις μια οποιαδήποτε μεταβλητή σε ένα 32bit σύστημα υπολογιστή χρειάζεσαι 32bit = 4bytes . Το τί τύπου θές να ειναι, ειναι απλα ένας τρόπος να περιορισεις τους τρόπους που θές να διαβάζεται αυτο που δειχνει ο δείκτης σου.
Απο την άλλη, για να αποθήκευσεις εναν short αριθμό σε ενα 32bit σύστημα υπολογιστή, χρειάζεσαι τα μισα bytes απο ότι ενας integer. Ενας integer σε ενα 32bit συστημα χρειάζεται 32bit για να αποθηκευθεί. Οπότε ενας short θέλει 16bit = 2bytes.
Τώρα, το γιατι μια δεικτοδότηση χρειάζεται ντε και καλα 32 bit ή 64 bit για 32/64 bit συστήματα αντίστοιχα, ειναι άλλου παπα ευαγγέλιο. Ειναι ενας τρόπος που χρησιμοποιείται απο τον επεξεργαστή και την cache του επεξεργαστή, ωστε να μειώνει τον μέσο αριθμό προβάσεων στην μνήμη RAM ( μαζί και το αντιστοιχο κοστος) αποθηκευοντας προσωρινα στην cache, αλλα ταυτόχρονα να επιτρέπει και την χρήση εικονικής μνήμης (swap). Αν θές να μάθεις λεπτομέρειες διαβασε για TLB και caches.
Ο ίδιος λόγος ειναι και το γιατί οι 32bit επεξεργαστές, μπορουν να υποστηρίξουν μέχρι 2^32Byte =4GByte, μέγιστη μνήμη RAM ( ή γενικα για κάθε διεργασία του συστήματος.)
Τώρα, στην C.
Εσύ πρεπει να θυμάσαι οτι όταν δηλώνεις εναν δεικτη και μετα κανεις δέσμεση μνήμης 100 ακεραιων και τον κανεις να δειχνει σε αυτη .
- Κώδικας: Επιλογή όλων
int* a;
a=(int*)malloc(100*sizeof(int));
Τότε ο δεικτης θα έχει σταθερό μέγεθος , και θα ειναι ουσιαστικά μια μεταβλητή που κρατάει την διευθυνση μνήμης του πρώτου byte της μνήμης που δεσμευσες πριν. Για παράδειγμα, έστω οτι γεμίζεις τον χωρο μνήμης που δεσμευσες παραπάνω,
- Κώδικας: Επιλογή όλων
int i=0;
for (i=0l;i<100;i++)
{
a[i]=i;
}
Τότε το παρακάτω
- Κώδικας: Επιλογή όλων
printf("a=%d \t *a=%d \n",a,*a);
θα σου τύπωνε
- Κώδικας: Επιλογή όλων
a= /*dieythynsi mnimis*/ *a=0;
Σημείωση : τον κώδικα δεν τον έχω δοκιμασει τώρα, αλλα λογικά δεν έχει προβλημα.