Στο τελευταίο μάθημα είχαμε μια συζήτηση για τους pointers. Παραθέτω από κάτω σχόλια. Δείτε στο link για λεπτομέρειες και πειραματιστείτε (https://www.w3schools.com/c/c_pointers.php).
Παραθέτω και την εικόνα
int* ptr int myAge
| 0x312asd |0x1232 | 43 | θέση μνήμης: 0x312asd
| . ▲
└───────────────────────────┘
ptr θα έχει τιμή 0x312asd
&ptr θα έχει τιμή 0x1232
&myAge θα έχει τιμή 0x312asd
*ptr θα έχει τιμή 43
myAge θα έχει τιμή 43
Αυτό σημαίνει ότι όταν αλλάζει η τιμή myAge θα αλλάζει και η τιμή του *ptr (reference).
Παρατηρούμε ότι ο τύπος δεδομένων pointer παίρνει τιμές διεύθυνσης μνήμης. Οπότε στην εκτύπωση αξιοποιείται ορθά το %p για να εκτυπώση την αντίστοιχη διεύθυνση μνήμης. Οπότε το int* ptr δημιουργεί μια νέα θέση μνήμης όπου μέσα έχει την τιμή τύπου Pointer.
Δείτε παρακάτω ή στο link (https://www.w3schools.com/c/c_pointers.php)
int myAge = 43; // an int variable
printf("%d", myAge); // Outputs the value of myAge (43)
printf("%p", &myAge); // Outputs the memory address of myAge (0x7ffe5367e044)
int myAge = 43; // An int variable
int* ptr = &myAge; // A pointer variable, with the name ptr, that stores the address of myAge
// Output the value of myAge (43)
printf("%d\n", myAge);
// Output the memory address of myAge (0x7ffe5367e044)
printf("%p\n", &myAge);
// Output the memory address of myAge with the pointer (0x7ffe5367e044)
printf("%p\n", ptr);
// Dereference: Output the value of myAge with the pointer (43)
printf("%d\n", *ptr);