Δείκτες

Δείκτες


Ορισμός: Μεταβλητή δείκτη (pointer variable) ή δείκτης (pointer) είναι μία μεταβλητή με τιμή μία διεύθυνση της κύριας μνήμης.

Δεν υπάρχει η δυνατότητα χρήσης δεικτών σε όλες τις γλώσσες προγραμματισμού.

Δήλωση:
<τύπος> * <όνομα – δείκτη>;
 π.χ.
int * num_ptr;

Αρχικοποίηση:
<τύπος> * <όνομα-δείκτη>=>διεύθυνση>;
 π.χ.
int *num_ptr = 1000;
int *num_ptr= &num;

Το σύμβολο & μπροστά από μία μεταβλητή σημαίνει «πάρε τη διεύθυνση στη μνήμη όπου βρίσκεται αυτή η μεταβλητή».





Δείκτης σε δείκτη
<τύπος> * * <μετ-δείκτη>;

π.χ.
int ** ptr;

Ανάθεση:
int *num_ptr;
ptr = & num_ptr;


main () {
  int x=1;
  int y=2;
  int *p;
  p=&x;      /* η p δείχνει τη διεύθυνση της x   */
  y=*p;      /* η y γίνεται 1, δηλαδή η τιμή της x   */
  *p=0;      /* η x γίνεται 0 */
  *p=*p+10;  /* x=x+10 */
  y=*p+10; /* y=x+10 */

  // Και οι 3 παρακάτω εντολές είναι ισοδύναμες με το x=x+1
  *p+=1;
  ++*p;
  (*p)++;
}


Το παρακάτω πρόγραμμα χρησιμοποιεί έναν δείκτη σε δείκτη. Αν το τρέξουμε θα δούμε ότι εκτυπώνει το 10.

#include <stdio.h>

main() {
  int x=5;
  int y=10;
  int *ptr;   // Δείκτης σε ακέραιο
  int **ptr2;   // Δείκτης σε δείκτη σε ακέραιο

  ptr=&x;   // Ο δείκτης prt παίρνει τη διεύθυνση του x («δείχνει» στο x)
  ptr2=&ptr;   // Ο δείκτης prt2 παίρνει τη διεύθυνση του ptr («δείχνει» στον ptr)
  *ptr2=&y;   // Αυτό που δείχνει ο prt2 (δηλαδή ο ptr) παίρνει τη διεύθυνση του y
  printf("%d", *ptr);
}