User Tools

Site Tools


cpp:pointers

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revisionBoth sides next revision
cpp:pointers [2021/04/27 04:23] – [Δείκτες και πίνακες] gthanoscpp:pointers [2021/04/27 04:34] – [Δείκτες αμετάβλητου περιεχομένου και δείκτες αμετάβλητης διεύθυνσης (const)] gthanos
Line 136: Line 136:
 </WRAP> </WRAP>
  
-===== Δείκτες αμετάβλητου περιεχομένου και δείκτες αμετάβλητης διεύθυνσης (const) =====+===== Δείκτες αμετάβλητου περιεχομένου =====
  
 Είδαμε ότι οι δείκτες είναι μεταβλητές που περιέχουν διευθύνσεις μνήμης στις οποίες αποθηκεύονται άλλες μεταβλητές. Μέσω των δεικτών μπορούμε να διαβάσουμε και να γράψουμε το περιεχόμενο μία διεύθυνσης μνήμης. Υπάρχουν όμως περιπτώσεις που ένας δείκτης είναι επιθυμητό να διαβάζει μόνο τα περιεχόμενα των διευθύνσεων μνήμης στα οποία δείχνει χωρίς να μπορεί να τα μεταβάλλει. Σε αυτή την περίπτωση αρκεί να δηλώσετε τον τύπο δεδομένων στον οποίο δείχνει ο δείκτης ως //const// ως εξής: Είδαμε ότι οι δείκτες είναι μεταβλητές που περιέχουν διευθύνσεις μνήμης στις οποίες αποθηκεύονται άλλες μεταβλητές. Μέσω των δεικτών μπορούμε να διαβάσουμε και να γράψουμε το περιεχόμενο μία διεύθυνσης μνήμης. Υπάρχουν όμως περιπτώσεις που ένας δείκτης είναι επιθυμητό να διαβάζει μόνο τα περιεχόμενα των διευθύνσεων μνήμης στα οποία δείχνει χωρίς να μπορεί να τα μεταβάλλει. Σε αυτή την περίπτωση αρκεί να δηλώσετε τον τύπο δεδομένων στον οποίο δείχνει ο δείκτης ως //const// ως εξής:
Line 180: Line 180:
 </code> </code>
  
-Από τον παραπάνω παράδειγμα παρατηρήστε ότι ο δείκτης //start// στη συνάρτηση //print_all// δεν μεταβάλλει τα δεδομένα στη μνήμηόμως το περιεχόμενο του δεν παραμένει σταθερό, αλλά μεταβάλλεται. Στην περίπτωση που επιθυμείτε τη χρήση ενός δείκτη ο οποίος δεν μεταβάλλει τη διεύθυνση στην οποία δείχνει, αλλά είναι σε θέση να μεταβάλλει το περιεχόμενο της διεύθυνσης αυτής τότε μπορείτε να δηλώσετε ένα δείκτη της μορφή +Από τον παραπάνω παράδειγμα παρατηρήστε ότι ο δείκτης //start// στη συνάρτηση //print_all// μεταβάλλει την τιμή τουαλλά δεν μεταβάλλει τα περιεχόμενα των διευθύσεων στα οποία δείχνει
 + 
 +===== Δείκτες αμετάβλητης διεύθυνσης ===== 
 + 
 +Υπάρχουν περιπτώσεις που είναι επιθυμητή η χρήση δεικτών που δεν μεταβάλλουν τη διεύθυνση στην οποία δείχνουν, αλλά μπορούν να μεταβάλλει το περιεχόμενο της διεύθυνσης αυτής. Σε αυτή την περίπτωση η δήλωση //const// δίνεται αμέσως μετά τον τύπο του δείκτη, όπως παρακάτω:
  
 <code c> <code c>
Line 187: Line 191:
 </code> </code>
  
-όπως στο παρακάτω παράδειγμα:+Το παρακάτω παράδειγμα είναι ενδεικτικό της χρήσης ενός τέτοιου δείκτη
  
 <code c const_address.cpp> <code c const_address.cpp>
Line 208: Line 212:
 </code> </code>
  
-Τέλος εάν επιθυμείτε να έχετε ένα δείκτη ο οποίος δεν μεταβάλλει τη διεύθυνση στην οποία δείχνει και δεν μπορεί να μεταβάλλει το περιεχόμενο της διεύθυνσης αυτής τότε μπορείτε να τον δηλώσετε ως εξής:+===== Δείκτες αμετάβλητης διεύθυνσης και αμετάβλητου περιεχομένου ===== 
 + 
 +Στην περίπτωση που είναι επιθυμητή η χρήση ενός δείκτη που δεν μεταβάλλει τη διεύθυνση στην οποία δείχνει ούτε το περιεχόμενο τηςτότε μπορείτε να δηλώσετε τον δείκτη ως εξής:
  
 <code c>char c = 'a'; const char * const ptr = &c;</code> <code c>char c = 'a'; const char * const ptr = &c;</code>
Line 248: Line 254:
 <code c> <code c>
 int x; int x;
-      int *       p1 = &x;  // non-const pointer to non-const int +      int *       p1 = &x;  // δείκτης χωρίς περιορισμούς 
-const int *       p2 = &x;  // non-const pointer to const int +const int *       p2 = &x;  // δείκτης αμετάβλητου περιεχομένου 
-      int * const p3 = &x;  // const pointer to non-const int +      int * const p3 = &x;  // δείκτης αμετάβλητης διεύθυνσης 
-const int * const p4 = &x;  // const pointer to const int +const int * const p4 = &x;  // δείκτης αμετάβλητου περιεχομένου και αμετάβλητης διεύθυνσης
 </code> </code>
 </WRAP> </WRAP>
cpp/pointers.txt · Last modified: 2023/04/25 13:14 by gthanos