Η C είναι απλή/Δείκτες
Δείκτης ονομάζεται ο μη αρνητικός ακέραιος ο οποίος "δείχνει" προς κάποια θέση στη μνήμη, δηλαδή αν ένας δείκτης έχει τιμή 1024, θα δείχνει προς το 1025ο ( Ν - 1 ) στοιχείο της μνήμης. Όλοι οι επεξεργαστές επιτρέπουν την ανάγνωση/εγγραφή θέσεων μνήμης με έμμεσο τρόπο, δηλαδή με δείκτες.
Στη C οι δείκτες δηλώνονται με έναν αστερίσκο πριν από το όνομα τους, για παράδειγμα:
int *integerPtr, integer;
δήλωσα το "integerPtr" και το "integer" στην ίδια γραμμή για να σας δείξω ότι η ιδιότητα του δείκτη προστίθενται μόνο στο αμέσως επόμενο όνομα, και όχι σε όλα. Άρα το πρώτο είναι δείκτης σε ακέραιο και το δεύτερο είναι ακέραιος. Πολλοί ίσως έλεγαν ότι αφού είναι το ίδιο, γιατί υπάρχει αυτή η διαφοροποίηση... Η απάντηση είναι για την αποφυγή λαθών, την απλούστευση του κώδικα και, ίσως το πιο σημαντικό, επειδή κάθε αρχιτεκτονική μπορεί να έχει διαφορετικό μέγεθος δείκτη πχ 32-bit και 64-bit. Οι μεταγλωττιστές διαμαρτύρονται για παράδειγμα όταν προσπαθούμε να αναθέσουμε έναν ακέραιο σε έναν δείκτη χωρίς επιπλέον κώδικα "μετατροπής". Στο παρακάτω όμως υπάρχει μεγάλη διαφορά μεταξύ του δείκτη και της απλής μεταβλητής:
float *realPtr, real;
όπως βλέπετε έχουμε έναν δείκτη σε πραγματικό και έναν πραγματικό. Ο ίδιος ο δείκτης είναι μια ακέραια μεταβλητή, αλλά αυτό σπανίως μας ενδιαφέρει...
Αν θέλετε να λάβετε την διεύθυνση μιας μεταβλητής, βάζετε το εμπορικό ΚΑΙ ( ambersand & ) μπροστά από αυτή:
integerPtr = &integer;
Εάν θέλετε να χρησιμοποιήσετε τον δείκτη για να λάβετε/αλλάξετε την τιμή στην οποία δείχνει, βάζετε τον αστερίσκο μπροστά απ`το όνομα του:
*integerPtr = 15;
Επίσης, ένας δείκτης μπορεί να χρησιμοποιηθεί και σαν πίνακας, με την ίδια ακριβώς σύνταξη:
int *arrayPtr, array[10];
arrayPtr = array;
arrayPtr[4] = 123;
Τέλος, οι δείκτες είναι από τις πιο χρήσιμες μεταβλητές που υπάρχουν στη C, επειδή επιτρέπουν το πέρασμα μεταβλητών σε συναρτήσεις κατά αναφορά, όπου η συνάρτηση λαμβάνει απλά δείκτες και μπορεί να αλλάξει μια εξωτερική μεταβλητή. Επίσης, είναι ο μόνος τρόπος να γίνει δυναμική εκχώρηση μνήμης ( θα εξηγηθεί σε επόμενο άρθρο ) με τις standard συναρτήσεις της C. Πολλές δομές δεδομένων όπως συνδεδεμένες λίστες, δυαδικά δέντρα κτλ χρειάζονται δείκτες για να λειτουργήσουν.