Λεπτομέρειες μετά απο τη συζήτηση για τους Pointers στην C
- Παρασκευή 10 Νοεμβρίου 2023 - 3:13 μ.μ. -

Στο τελευταίο μάθημα είχαμε μια συζήτηση για τους 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);