Η χρήση των δεικτών ή pointers στη γλώσσα Cpp (μέρος 2/2)

Μπορείτε να βρείτε το πρώτο μέρος του άρθρου εδώ.

Λόγω της ικανότητας του δείκτη να αναφέρεται απευθείας στην τιμή κάποιας μεταβλητής, κάθε δείκτης έχει διαφορετικές ιδιότητες ανάλογα με το αν δείχνει σε τιμή τύπου char ή τιμή τύπου int ή float. Κατά τη διαδικασία dereference, ο τύπος πρέπει να είναι γνωστός. Γι’ αυτό το λόγο και χρειάζεται η σύνταξη του εκάστοτε τύπου δεδομένων στη δήλωσή του.

Η χρήση των δεικτών ή pointers στη γλώσσα Cpp: σύνταξη δήλωσης

Η σύνταξη της δήλωσης ενός δείκτη είναι της εξής μορφής:

typeOfData * pointerName ;

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

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

int * numberPointer;
char * characterPointer;
double * decimalPointer;

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

Παρατηρούμε ότι δε χρησιμοποιείται καμία λέξη ενδεικτική των δεικτών (π.χ. “pointer”), αλλά τα αντικείμενα καθορίζονται ως δείκτες από τον τελεστή *.

[ms_alert icon=”fa-star” box_shadow=”no” dismissable=”no” class=”” id=””]ΣΗΜΕΙΩΣΗ: Το σύμβολο * που χρησιμοποιείται ως αριστερός τελεσταίος για τη δήλωση ενός δείκτη, δεν πρέπει να συγχέεται με τον τελεστή dereference (*) που χρησιμοποιείται ως δεξιός τελεσταίος. Το * είναι πολυμορφικός χαρακτήρας και η σημασία του εξαρτάται από το συντακτικό περιβάλλον στο οποίο συναντάται.[/ms_alert]

Η χρήση των δεικτών ή pointers στη γλώσσα Cpp: σύνταξη και χρήση με παράδειγμα

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

#include 
using namespace std;
int main ()
{
  int myNumber1, myNumber2; //1
  int * myPointer; //2
  myPointer = &myNumber1; //3
  *myPointer = 5; //4
  myPointer = &myNumber2; //5
  *myPointer = 40; //6
  cout << "Ο myNumber1 ισούται με " << myNumber1 << endl; //7
  cout << "Ο myNumber2 ισούται με " << myNumber2 << endl; //8
return 0;
}

Ας μελετήσουμε τις γραμμές του κώδικα.

  • 1: δήλωση δύο μεταβλητών με ονόματα myNumber1 και myNumber2, τύπου ακεραίου
  • 2: δήλωση ενός δείκτη με όνομα myPointer, που ορίζεται να δείχνει σε μεταβλητές τύπου ακεραίου
  • 3: ανάθεση της διεύθυνσης της myNumber1 στο δείκτη myPointer
  • 4: εκχώρηση της τιμής 5 απευθείας στο περιεχόμενο της διεύθυνσης του δείκτη myPointerpointer assignment - δείκτες - c++
  • 5: ανάθεση της διεύθυνσης της myNumber2 στο δείκτη myPointer
  • 6: εκχώρηση της τιμής 40 απευθείας στο περιεχόμενο της διεύθυνσης του δείκτη myPointerpointer assignment - δείκτες - c++
  • 7: εκτύπωση μηνύματος και τιμής του myNumber1
  • 8: εκτύπωση μηνύματος και τιμής του myNumber2

Το αποτέλεσμα που προκύπτει στην οθόνη είναι το εξής:
Ο myNumber1 ισούται με 5
Ο myNumber2 ισούται με 40

Οι μεταβλητές myNumber1 και myNumber2 δεν αρχικοποιούνται απευθείας μέσα στο πρόγραμμα, αλλά και οι δύο καταλήγουν να περιέχουν από μία τιμή. Η εκχώρηση πραγματοποιείται μέσω χρήσης του δείκτη myPointer. [ms_alert icon=”fa-info” box_shadow=”no” dismissable=”no” class=”” id=””]Εφόσον ο δείκτης έχει οριστεί να δείχνει σε μεταβλητές τύπου ακεραίου, μπορεί να χρησιμοποιηθεί για διαφορετική μεταβλητή κάθε φορά, αρκεί η μεταβλητή αυτή να είναι επίσης ακεραίου τύπου.[/ms_alert]

Leave a Comment

Η ηλ. διεύθυνση σας δεν δημοσιεύεται. Τα υποχρεωτικά πεδία σημειώνονται με *

4 × five =

Αυτός ο ιστότοπος χρησιμοποιεί το Akismet για να μειώσει τα ανεπιθύμητα σχόλια. Μάθετε πώς υφίστανται επεξεργασία τα δεδομένα των σχολίων σας.