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

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

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

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

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

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

typeOfData * pointerName ;

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

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

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

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

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

Η χρήση των δεικτών ή 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.

Απάντηση

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