4.4 Πρόσβαση σε διεύθυνση μνήμης στην γλώσσα C

Στη γλώσσα C, η πρόσβαση σε διεύθυνση μνήμης μπορεί να γίνει μέσω της χρήσης δεικτών. Ο δείκτης είναι μια μεταβλητή που αποθηκεύει τη διεύθυνση μνήμης ενός αντικειμένου ή μιας μεταβλητής.

Για να αποκτήσουμε πρόσβαση σε μια διεύθυνση μνήμης, πρέπει να δηλώσουμε έναν δείκτη που αντιστοιχεί στον τύπο των δεδομένων που θέλουμε να αποθηκεύσουμε. Έπειτα, μπορούμε να χρησιμοποιήσουμε τον τελεστή αναφοράς (&) για να πάρουμε τη διεύθυνση μνήμης μιας μεταβλητής.

Για παράδειγμα, αν έχουμε μια μεταβλητή με όνομα “x”, μπορούμε να δηλώσουμε έναν δείκτη που δείχνει στη διεύθυνση μνήμης της “x” ως εξής:

int x = 5;
int *ptr;  // Δήλωση δείκτη
ptr = &x;  // Ανάθεση της διεύθυνσης μνήμης της "x" στον δείκτη

Έπειτα, μπορούμε να αποκτήσουμε πρόσβαση στην τιμή της “x” από τον δείκτη με τη χρήση του τελεστή αποκατάστασης (*):

int value = *ptr;  // Απόκτηση της τιμής της "x" από τον δείκτη

Με τη χρήση δεικτών, μπορ

ούμε να προσπελάσουμε και να τροποποιήσουμε την τιμή μιας μεταβλητής μέσω της αναφοράς στην αντίστοιχη διεύθυνση μνήμης.

Παράδειγμα

#include <stdio.h>

int main() {
    int num = 10; // Δήλωση μεταβλητής num με τιμή 10

    printf("The memory address of variable num is: %p", &num); // Εκτύπωση της διεύθυνσης μνήμης της μεταβλητής num

    return 0;
}

Ο κώδικας αυτός εκτυπώνει τη διεύθυνση μνήμης μιας μεταβλητής στη γλώσσα C. Πιο συγκεκριμένα, τα βήματα που ακολουθεί είναι τα εξής:

  1. Η γραμμή #include <stdio.h> εισάγει τη βιβλιοθήκη stdio.h, η οποία περιέχει τη συνάρτηση printf.
  2. Η συνάρτηση main είναι η κύρια συνάρτηση του προγράμματος και χρησιμοποιείται ως σημείο εκκίνησης.
  3. Η γραμμή int num = 10; δηλώνει μια μεταβλητή num τύπου int και την αρχικοποιεί με την τιμή 10.
  4. Η συνάρτηση printf χρησιμοποιείται για να εκτυπώσει κείμενο στην οθόνη. Συγκεκριμένα, η γραμμή printf("The memory address of variable num is: %p", &num); εκτυπώνει το κείμενο “The memory address of variable num is: ” ακολουθούμενο από τη διεύθυνση μνήμης της μεταβλητής num. Η %p χρησιμοποιείται για τη μορφοποίηση της εκτύπωσης της διεύθυνσης μνήμης.
  5. Τέλος, η συνάρτηση main επιστρέφει την τιμή 0 με την εντολή return 0;, υποδεικνύοντας ότι το πρόγραμμα ολοκληρώθηκε με επιτυχία.

Το παραπάνω πρόγραμμα θα εκτυπώσει κάτι παρόμοιο με το παρακάτω ανάλογα με τη διεύθυνση μνήμης που εκχωρείται στη μεταβλητή num:

The memory address of variable num is: 0x7fff584c82bc

Σημειώστε ότι η διεύθυνση μνήμης που εκτυπώνεται ενδέχεται να διαφέρει από το παραπάνω ανάλογα με τον υπολογιστή και το λειτουργικό σύστημα που χρησιμοποιείτε.

Σημείωση: Η διεύθυνση μνήμης είναι σε δεκαεξαδική μορφή (0x ..). Πιθανόν να μην λάβετε το ίδιο αποτέλεσμα στο πρόγραμμά σας, καθώς αυτό εξαρτάται από το πού αποθηκεύεται η μεταβλητή στον υπολογιστή σας.

Πρέπει επίσης να σημειώσετε ότι το &myAge ονομάζεται συχνά “δείκτης” (pointer). Ένας δείκτης αποθηκεύει τη διεύθυνση μνήμης μιας μεταβλητής ως την τιμή του. Για να εκτυπώσουμε τιμές δεικτών, χρησιμοποιούμε το μορφοποιητή μορφής %p.

Θα μάθετε πολύ περισσότερα σχετικά με τους δείκτες στο επόμενο κεφάλαιο.

20 Ιουνίου, 2023
top
error: Content is protected !!
Μετάβαση σε γραμμή εργαλείων