Μετάβαση στο περιεχόμενο

Δείκτης (πληροφορική): Διαφορά μεταξύ των αναθεωρήσεων

Από τη Βικιπαίδεια, την ελεύθερη εγκυκλοπαίδεια
Περιεχόμενο που διαγράφηκε Περιεχόμενο που προστέθηκε
μ + ref (επεξεργασία με το ProveIt)
μΧωρίς σύνοψη επεξεργασίας
 
(37 ενδιάμεσες εκδόσεις από 16 χρήστες δεν εμφανίζονται)
Γραμμή 1: Γραμμή 1:
[[Εικόνα:Pointers.svg|thumb|right|230px|Ένας δείκτης (ο '''a''') δείχνει μια διεύθυνση μνήμης η οποία αναφέρεται (περιέχει) σε μια μεταβλητή '''b'''. Στο παραπάνω διάγραμμα χρησιμοποιείται ο ίδιος χώρος διευθύνσεων για δείκτες και μη-δείκτες, κάτι το οποίο δεν συμβαίνει πάντα.]]
[[Αρχείο:Pointers_el.svg|μικρογραφία|δεξιά|300px|Ένας δείκτης (ο '''p''') δείχνει μια διεύθυνση μνήμης η οποία αναφέρεται (περιέχει) σε μια μεταβλητή '''b'''. Στο παραπάνω διάγραμμα χρησιμοποιείται ο ίδιος χώρος διευθύνσεων για δείκτες και μη-δείκτες, κάτι το οποίο δεν συμβαίνει πάντα.]]


Στην [[πληροφορική]], ο '''δείκτης''' (αγγλ. ''Pointer'') είναι [[τύπος δεδομένων]] του οποίου η τιμή είναι η [[διεύθυνση μνήμης]] που περιέχει κάποιο άλλο δεδομένο. Ονομάζεται δείκτης γιατί είναι μια μεταβλητή η οποία "δείχνει" την διεύθυνση μνήμης μιας άλλης μεταβλητής. Για την πρόσβαση στην τιμή της διεύθυνση μνήμης που περιέχει ο δείκτης (την μεταβλητή που δείχνει η διεύθυνση) χρησιμοποιείται ''ο τελεστής έμμεσης αναφοράς'' (dereferencing operator). Για την πρόσβαση στην διεύθυνση μνήμης που δείχνει ο δείκτης χρησιμοποιείται ''το τελεστής διεύθυνση'' (address operator). <ref name="softlab_programmatistikes_texnikes">{{cite web | url=http://courses.softlab.ntua.gr/progtech/Lectures/lecture-5.ppt | title=Προγραμματιστικές Τεχνικές: Δείκτες, Πίνακες και Δείκτες, Δείκτες σε Συναρτήσεις | accessdate=2011-10-03 | author=Α-Γ. Σταφυλοπάτης, Κ. Κοντογιάννης, Γ. Μαΐστρος | publisher=[http://courses.softlab.ntua.gr/progtech/ Εργαστήριο Λογισμικού Εθνικού Μετσόβιου Πολυτεχνείου]}}</ref> <ref>{{cite web | url=http://www.cs.princeton.edu/courses/archive/spr01/cs217/slides/8.ptrs.pdf | title=Pointers | accessdate=2011-10-03 | author=Mona Singh | date=1999-09-14 | publisher=[http://www.cs.princeton.edu/courses/archive/spr01/cs217/schedule.html Princeton University - Computer Science Department]}}</ref>
Στην [[πληροφορική]], ο '''δείκτης''' (αγγλ. ''Pointer'') είναι [[τύπος δεδομένων]] του οποίου η τιμή είναι η [[διεύθυνση μνήμης]] που περιέχει κάποιο άλλο δεδομένο. Ονομάζεται δείκτης γιατί είναι μια μεταβλητή η οποία "δείχνει" την διεύθυνση μνήμης μιας άλλης μεταβλητής. Για την πρόσβαση στην τιμή της διεύθυνση μνήμης που περιέχει ο δείκτης (την μεταβλητή που δείχνει η διεύθυνση) χρησιμοποιείται ''ο τελεστής έμμεσης αναφοράς'' (dereferencing operator). Για την πρόσβαση στην διεύθυνση μνήμης που δείχνει ο δείκτης χρησιμοποιείται ''ο τελεστής διεύθυνσης'' (address operator). <ref name="softlab_programmatistikes_texnikes">{{cite web | url=http://courses.softlab.ntua.gr/progtech/Lectures/lecture-5.ppt | title=Προγραμματιστικές Τεχνικές: Δείκτες, Πίνακες και Δείκτες, Δείκτες σε Συναρτήσεις | accessdate=2011-10-03 | author1=Α-Γ. Σταφυλοπάτης |author2=Κ. Κοντογιάννης |author3=Γ. Μαΐστρος | publisher=Εργαστήριο Λογισμικού Εθνικού Μετσόβιου Πολυτεχνείου | archiveurl=https://web.archive.org/web/20111203084653/http://courses.softlab.ntua.gr/progtech/Lectures/lecture-5.ppt | archivedate=2011-12-03 | url-status=dead }}</ref> <ref>{{cite web | url=http://www.cs.princeton.edu/courses/archive/spr01/cs217/slides/8.ptrs.pdf | title=Pointers | accessdate=2011-10-03 | author=Mona Singh | date=1999-09-14 | publisher=Princeton University - Computer Science Department}}</ref> <ref name="stanford_pointer_basics">{{cite web | url=http://cslibrary.stanford.edu/106/ | title=Pointer Basics | accessdate=2011-10-03 | publisher=Stanford CS Education Library}}</ref>


Δείκτες σε δεδομένα μπορούν να αυξήσουν την απόδοση σε βρόγχους επανάληψης, όπως για παράδειγμα σε βρόγχο πρόσβασης σε χαρακτήρες [[Συμβολοσειρά|συμβολοσειρών]] ή βρόγχους σε πίνακες αναφοράς (lookup tables) ή βρόγχους διάσχισης δενδρικών δομών (tree structures). Σε συγκεκριμένες περιπτώσεις, είναι αποδοτικότερο από πλευράς χρήσης μνήμης και χρόνου να αντιγραφεί ένα δείκτης και στην συνέχεια να χρησιμοποιηθεί ο τελεστής έμμεσης αναφοράς από το να αντιγραφούν τα δεδομένα (ιδιαίτερα στην περίπτωση ογκωδών δομών δεδομένων) στα οποία ο δείκτης αναφέρεται. <ref name="dimitris_mixahl_pinakes_deitkes_klp">{{cite web | url=http://www.dit.hua.gr/~michail/teaching/progI09/slides/130_References-And-Dynamic-Memory.pdf | title=Πίνακες, Δείκτες, Αναφορές και Δυναμική Μνήμη | accessdate=2011-10-03 | author=Δημήτρης Μιχαήλ | publisher=Τμήμα Πληροφορικής και Τηλεματικής - Χαροκόπειο Πανεπιστήμιο}}</ref>
Δείκτες σε δεδομένα μπορούν να αυξήσουν την απόδοση σε βρόχους επανάληψης, όπως για παράδειγμα σε βρόχο πρόσβασης σε χαρακτήρες [[Συμβολοσειρά|συμβολοσειρών]] ή βρόχους σε πίνακες αναφοράς (lookup tables) ή βρόχους διάσχισης δενδρικών δομών (tree structures). Σε συγκεκριμένες περιπτώσεις, είναι αποδοτικότερο από πλευράς χρήσης μνήμης και χρόνου να αντιγραφεί ένα δείκτης και στην συνέχεια να χρησιμοποιηθεί ο τελεστής έμμεσης αναφοράς από το να αντιγραφούν τα δεδομένα (ιδιαίτερα στην περίπτωση ογκωδών δομών δεδομένων) στα οποία ο δείκτης αναφέρεται. <ref name="dimitris_mixahl_pinakes_deitkes_klp">{{cite web | url=http://www.dit.hua.gr/~michail/teaching/progI09/slides/130_References-And-Dynamic-Memory.pdf | title=Πίνακες, Δείκτες, Αναφορές και Δυναμική Μνήμη | accessdate=2011-10-03 | author=Δημήτρης Μιχαήλ | publisher=Τμήμα Πληροφορικής και Τηλεματικής - Χαροκόπειο Πανεπιστήμιο }}{{Dead link|date=Οκτώβριος 2019 }}</ref>
Οι δείκτες χρησιμοποιούνται για να αποθηκεύουν τις διευθύνσεις υπορουτίνων στον διαδικαστικό προγραμματισμό και η χρήση αυτών κατά την διάρκεια εκτέλεσης των προγραμμάτων χρησιμοποιώντας βιβλιοθήκες δυναμικής σύνδεσης (dynamic link libraries - DLLs). Στον αντικειμενοστραφή προγραμματισμό οι δείκτες σε συναρτήσεις χρησιμοποιούνται στην διασύνδεση μεθόδων (binding methods).
Οι δείκτες χρησιμοποιούνται για να αποθηκεύουν τις διευθύνσεις υπορουτίνων στον [[Δομημένος προγραμματισμός|διαδικαστικό προγραμματισμό]] και η χρήση αυτών κατά την διάρκεια εκτέλεσης των προγραμμάτων χρησιμοποιώντας βιβλιοθήκες δυναμικής σύνδεσης (dynamic link libraries - DLLs). Στον [[Αντικειμενοστρεφής προγραμματισμός|αντικειμενοστρεφή προγραμματισμό]] οι δείκτες σε συναρτήσεις χρησιμοποιούνται στην διασύνδεση μεθόδων (binding methods).


Στις περισσότερες [[Γλώσσα υψηλού επιπέδου|γλώσσες υψηλού επιπέδου]] οι δείκτες χρησιμοποιούνται σπανίως διότι αυτές παρέχουν άλλους μηχανισμούς που κάνουν περιττή την χρήση δεικτών. Στις γλώσσες υψηλού επιπέδου που χρησιμοποιούνται οι δείκτες, παίζουν ουσιαστικά τον ρόλο [[καταχωρητής|καταχωρητών γενικού σκοπού]] των [[Γλώσσα χαμηλού επιπέδου|γλωσσών χαμηλού επιπέδου]] όπως είναι η [[συμβολική γλώσσα]] και η [[γλώσσα μηχανής]]. Επειδή οι δείκτες επιτρέπουν την κατευθείαν πρόσβαση σε θέση μνήμης, η χρήση αυτών στον προγραμματισμό δημιουργεί ρίσκα με την λάθος χρήση αυτών.
Στις περισσότερες [[Γλώσσα υψηλού επιπέδου|γλώσσες υψηλού επιπέδου]] οι δείκτες χρησιμοποιούνται σπανίως διότι αυτές παρέχουν άλλους μηχανισμούς που κάνουν περιττή την χρήση δεικτών. Στις γλώσσες υψηλού επιπέδου που χρησιμοποιούνται οι δείκτες, παίζουν ουσιαστικά τον ρόλο [[καταχωρητής|καταχωρητών γενικού σκοπού]] των [[Γλώσσα χαμηλού επιπέδου|γλωσσών χαμηλού επιπέδου]] όπως είναι η [[συμβολική γλώσσα]] και η [[γλώσσα μηχανής]]. Επειδή οι δείκτες επιτρέπουν την κατευθείαν πρόσβαση σε θέση μνήμης, η χρήση αυτών στον προγραμματισμό δημιουργεί ρίσκα με την λάθος χρήση αυτών.


== Περιγραφή ==
== Παραπομπές==
{{παραπομπές}}


Ένας αρχέγονος τύπος δεδομένου (primitive data type) είναι ένας τύπος δεδομένου το οποίο μπορεί να γραφτεί στην μνήμη του υπολογιστή χρησιμοποιώντας λειτουργίες πρόσβασης στην μνήμη (για παράδειγμα και το [[Byte]] και η [[Λέξη (τύπος δεδομένων)|Λέξη-Word]] είναι αρχέγονοι τύποι δεδομένων). Ένα συσσωμάτωμα δεδομένων (data aggregate) είναι ένα σύνολο από αρχέγονα δεδομένα τα οποία καταλαμβάνουν ένα συνεχές χώρο μνήμης και δημιουργούν ένα δεδομένο (για παράδειγμα ένα τέτοιο συσσωμάτωμα μπορεί να καταλαμβάνει 3 συνεχόμενα bytes, με τιμές οι οποίες αναπαριστούν τις 3 συντεταγμένες στο χώρο). Όταν το συσσωμάτωμα δεδομένων αποτελείται από τον ίδιο τύπο αρχέγονων δεδομένων, τότε αυτό μπορεί να αποκαλεστεί δομή δεδομένων πίνακα. Με αυτή τη λογική μια λέξη-word πολλών bytes είναι ένας πίνακας από bytes. Ορισμένα προγράμματα χειρίζονται τις λέξεις-words ως πίνακες από bytes. Μέσα στο πλαίσιο αυτών των ορισμών, ένα ''byte'' είναι ο μικρότερος αρχέγονος τύπος και κάθε διεύθυνση μνήμης ορίζει ένα διαφορετικό byte. Η πρώτη διεύθυνση μνήμης για το πρώτο byte θεωρείται η βασική διεύθυνση μνήμης για τα υπόλοιπα δεδομένα.

Ένα ''δείκτης σε μνήμη'' (ή απλά ''δείκτης'') είναι ένας αρχέγονος τύπος, η τιμή του οποίου χρησιμοποιείται για αναφορά σε μια θέση μνήμης. Λέμε ότι ''ένας δείκτης δείχνει σε μια διεύθυνση μνήμης''. Επίσης λέμε ότι ''ένας δείχτης δείχνει σε ένα δεδομένο (στη μνήμη)'' όταν η τιμή του δείχτη είναι τιμή τιμή του δεδομένου στην μνήμη. Πιο γενικά ένας δείκτης είναι ένα είδος [[Αναφορά (επιστήμη υπολογιστών)|αναφοράς]] και λέμε ότι ''μια αναφορά δείχνει το δεδομένο το οποίο είναι αποθηκευμένο κάπου στην μνήμη''. Για να προσπελάσουμε το δεδομένο κάνουμε ''έμμεση αναφορά στο δείκτη'' (dereference the pointer). Η ιδιότητα η οποία ξεχωρίζει τους δείκτες από τα άλλα είδη αναφορών είναι ότι είναι έννοια χαμηλού επιπέδου και η τιμή του δείκτη αναφέρεται σε μια διεύθυνση μνήμης.

== Παράδειγμα ==
Στο παρακάτω σχεδιάγραμμα φαίνεται σχηματικά ή άμεση και η έμμεση (με δείκτη) αναφορά σε μια μεταβλητή:
[[Αρχείο:Pointer versus variable access in C - el.svg|μικρογραφία|δεξιά|600px|<center>Άμεση και έμμεση (μέσω δείκτη) πρόσβαση σε μια μεταβλητή. Στην μεταβλητή i δίνουμε την τιμή 5. </center>]]
<syntaxhighlight lang="cpp">
// ορισμός της μεταβλητής i
int i;
// άμεση ανάθεση τιμής 5
i = 5;
// ορισμός τδείκτη *p που
// δείχνει την διεύθυνση του i
// & - τελεστής αναφοράς
// * - τελεστής έμμεσης αναφοράς
int *p = &i;
// έμμεση αναφορά στην i
// και ορισμός της τιμής 5
*p=5;
</syntaxhighlight>

Στο παρακάτω παράδειγμα βλέπουμε την χρήση των δεικτών και των αναφορών στην C++.

<syntaxhighlight lang="cpp">
// παράδειγμα δείκτη σε δείκτη
int **q = &p; // τo **q είναι δείκτης σε δείκτη
// το **q δείχνει το *p το οποίο δείχνει το i

/* int **r = p; // <--- ΑΥΤΟ ΕΙΝΑΙ ΛΑΘΟΣ */

// το *p και το **q δίνουν το i και το *q δίνει το p

// παράδειγμα πίνακα
char buf[] = "databytes";
char *cp = &buf[0]; // η θέση 0 είναι η πρώτη θέση στον πίνακα χαρακτήρων - χαρακτήρας 'd'
</syntaxhighlight>

== Δείτε επίσης ==
* [[Αναφορά (επιστήμη υπολογιστών)]]
* [[Δείκτης συνάρτησης]]

== Εξωτερικοί σύνδεσμοι ==
* [http://cslibrary.stanford.edu/104/ Εκπαιδευτικό ψυχαγωγικό βίντεο από το Πανεπιστήμιο Stanford για τους δείκτες].

== Παραπομπές ==
{{commonscat|Pointers_(computing)}}
<references />


{{Τύποι δεδομένων}}
{{Τύποι δεδομένων}}

{{πληροφορική-επέκταση}}
[[Κατηγορία:Προγραμματισμός]]
{{ενσωμάτωση κειμένου|en|Pointer (computing)}}
[[Κατηγορία:Επιστήμη υπολογιστών]]
[[Κατηγορία:Γλώσσες προγραμματισμού]]
[[Κατηγορία:Τύποι δεδομένων]]
[[Κατηγορία:Τύποι δεδομένων]]


[[ar:مؤشر (لغات البرمجة)]]
[[ca:Punter (programació)]]
[[cs:Ukazatel (programování)]]
[[de:Zeiger (Informatik)]]
[[en:Pointer (computing)]]
[[es:Puntero (informática)]]
[[et:Viit (informaatika)]]
[[fa:اشاره‌گر]]
[[fi:Osoitin (ohjelmointi)]]
[[fr:Pointeur (programmation)]]
[[he:מצביע]]
[[is:Bendir]]
[[it:Puntatore (programmazione)]]
[[ja:ポインタ (プログラミング)]]
[[kk:Нұсқағыш]]
[[ko:포인터 (프로그래밍)]]
[[nl:Pointer (programmeerconcept)]]
[[pl:Zmienna wskaźnikowa]]
[[pt:Ponteiro (programação)]]
[[ru:Указатель (тип данных)]]
[[sk:Ukazovateľ (informatika)]]
[[sr:Показивач (програмирање)]]
[[sv:Datatyp#Pekare och referenstyper]]
[[sv:Datatyp#Pekare och referenstyper]]
[[ta:சுட்டு (நிரலாக்கம்)]]
[[tr:İşaretçiler]]
[[uk:Вказівник]]
[[zh:指针 (信息学)]]

Τρέχουσα έκδοση από την 19:41, 29 Δεκεμβρίου 2023

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

Στην πληροφορική, ο δείκτης (αγγλ. Pointer) είναι τύπος δεδομένων του οποίου η τιμή είναι η διεύθυνση μνήμης που περιέχει κάποιο άλλο δεδομένο. Ονομάζεται δείκτης γιατί είναι μια μεταβλητή η οποία "δείχνει" την διεύθυνση μνήμης μιας άλλης μεταβλητής. Για την πρόσβαση στην τιμή της διεύθυνση μνήμης που περιέχει ο δείκτης (την μεταβλητή που δείχνει η διεύθυνση) χρησιμοποιείται ο τελεστής έμμεσης αναφοράς (dereferencing operator). Για την πρόσβαση στην διεύθυνση μνήμης που δείχνει ο δείκτης χρησιμοποιείται ο τελεστής διεύθυνσης (address operator). [1] [2] [3]

Δείκτες σε δεδομένα μπορούν να αυξήσουν την απόδοση σε βρόχους επανάληψης, όπως για παράδειγμα σε βρόχο πρόσβασης σε χαρακτήρες συμβολοσειρών ή βρόχους σε πίνακες αναφοράς (lookup tables) ή βρόχους διάσχισης δενδρικών δομών (tree structures). Σε συγκεκριμένες περιπτώσεις, είναι αποδοτικότερο από πλευράς χρήσης μνήμης και χρόνου να αντιγραφεί ένα δείκτης και στην συνέχεια να χρησιμοποιηθεί ο τελεστής έμμεσης αναφοράς από το να αντιγραφούν τα δεδομένα (ιδιαίτερα στην περίπτωση ογκωδών δομών δεδομένων) στα οποία ο δείκτης αναφέρεται. [4]

Οι δείκτες χρησιμοποιούνται για να αποθηκεύουν τις διευθύνσεις υπορουτίνων στον διαδικαστικό προγραμματισμό και η χρήση αυτών κατά την διάρκεια εκτέλεσης των προγραμμάτων χρησιμοποιώντας βιβλιοθήκες δυναμικής σύνδεσης (dynamic link libraries - DLLs). Στον αντικειμενοστρεφή προγραμματισμό οι δείκτες σε συναρτήσεις χρησιμοποιούνται στην διασύνδεση μεθόδων (binding methods).

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

Ένας αρχέγονος τύπος δεδομένου (primitive data type) είναι ένας τύπος δεδομένου το οποίο μπορεί να γραφτεί στην μνήμη του υπολογιστή χρησιμοποιώντας λειτουργίες πρόσβασης στην μνήμη (για παράδειγμα και το Byte και η Λέξη-Word είναι αρχέγονοι τύποι δεδομένων). Ένα συσσωμάτωμα δεδομένων (data aggregate) είναι ένα σύνολο από αρχέγονα δεδομένα τα οποία καταλαμβάνουν ένα συνεχές χώρο μνήμης και δημιουργούν ένα δεδομένο (για παράδειγμα ένα τέτοιο συσσωμάτωμα μπορεί να καταλαμβάνει 3 συνεχόμενα bytes, με τιμές οι οποίες αναπαριστούν τις 3 συντεταγμένες στο χώρο). Όταν το συσσωμάτωμα δεδομένων αποτελείται από τον ίδιο τύπο αρχέγονων δεδομένων, τότε αυτό μπορεί να αποκαλεστεί δομή δεδομένων πίνακα. Με αυτή τη λογική μια λέξη-word πολλών bytes είναι ένας πίνακας από bytes. Ορισμένα προγράμματα χειρίζονται τις λέξεις-words ως πίνακες από bytes. Μέσα στο πλαίσιο αυτών των ορισμών, ένα byte είναι ο μικρότερος αρχέγονος τύπος και κάθε διεύθυνση μνήμης ορίζει ένα διαφορετικό byte. Η πρώτη διεύθυνση μνήμης για το πρώτο byte θεωρείται η βασική διεύθυνση μνήμης για τα υπόλοιπα δεδομένα.

Ένα δείκτης σε μνήμη (ή απλά δείκτης) είναι ένας αρχέγονος τύπος, η τιμή του οποίου χρησιμοποιείται για αναφορά σε μια θέση μνήμης. Λέμε ότι ένας δείκτης δείχνει σε μια διεύθυνση μνήμης. Επίσης λέμε ότι ένας δείχτης δείχνει σε ένα δεδομένο (στη μνήμη) όταν η τιμή του δείχτη είναι τιμή τιμή του δεδομένου στην μνήμη. Πιο γενικά ένας δείκτης είναι ένα είδος αναφοράς και λέμε ότι μια αναφορά δείχνει το δεδομένο το οποίο είναι αποθηκευμένο κάπου στην μνήμη. Για να προσπελάσουμε το δεδομένο κάνουμε έμμεση αναφορά στο δείκτη (dereference the pointer). Η ιδιότητα η οποία ξεχωρίζει τους δείκτες από τα άλλα είδη αναφορών είναι ότι είναι έννοια χαμηλού επιπέδου και η τιμή του δείκτη αναφέρεται σε μια διεύθυνση μνήμης.

Στο παρακάτω σχεδιάγραμμα φαίνεται σχηματικά ή άμεση και η έμμεση (με δείκτη) αναφορά σε μια μεταβλητή:

Άμεση και έμμεση (μέσω δείκτη) πρόσβαση σε μια μεταβλητή. Στην μεταβλητή i δίνουμε την τιμή 5.
// ορισμός της μεταβλητής i
int i;
// άμεση ανάθεση τιμής 5
i = 5;      
// ορισμός τδείκτη *p που 
// δείχνει την διεύθυνση του i 
// &  - τελεστής αναφοράς
// *  - τελεστής έμμεσης αναφοράς
int *p = &i;    
               
// έμμεση αναφορά στην i 
// και ορισμός της τιμής 5 
*p=5;

Στο παρακάτω παράδειγμα βλέπουμε την χρήση των δεικτών και των αναφορών στην C++.

// παράδειγμα δείκτη σε δείκτη
int **q = &p;   // τo **q είναι δείκτης σε δείκτη 
                // το **q δείχνει το *p το οποίο δείχνει το i

/* int **r = p;    // <--- ΑΥΤΟ ΕΙΝΑΙ ΛΑΘΟΣ */     

// το *p και το **q δίνουν το i και το *q δίνει το p

// παράδειγμα πίνακα
char buf[] = "databytes";
char *cp = &buf[0];         // η θέση 0 είναι η πρώτη θέση στον πίνακα χαρακτήρων - χαρακτήρας 'd'

Εξωτερικοί σύνδεσμοι

[Επεξεργασία | επεξεργασία κώδικα]
  1. Α-Γ. Σταφυλοπάτης· Κ. Κοντογιάννης· Γ. Μαΐστρος. «Προγραμματιστικές Τεχνικές: Δείκτες, Πίνακες και Δείκτες, Δείκτες σε Συναρτήσεις». Εργαστήριο Λογισμικού Εθνικού Μετσόβιου Πολυτεχνείου. Αρχειοθετήθηκε από το πρωτότυπο στις 3 Δεκεμβρίου 2011. Ανακτήθηκε στις 3 Οκτωβρίου 2011. 
  2. Mona Singh (14 Σεπτεμβρίου 1999). «Pointers» (PDF). Princeton University - Computer Science Department. Ανακτήθηκε στις 3 Οκτωβρίου 2011. 
  3. «Pointer Basics». Stanford CS Education Library. Ανακτήθηκε στις 3 Οκτωβρίου 2011. 
  4. Δημήτρης Μιχαήλ. «Πίνακες, Δείκτες, Αναφορές και Δυναμική Μνήμη» (PDF). Τμήμα Πληροφορικής και Τηλεματικής - Χαροκόπειο Πανεπιστήμιο. Ανακτήθηκε στις 3 Οκτωβρίου 2011. [νεκρός σύνδεσμος]