Άρθρο #8: Δείκτες

Επισκόπηση προηγούμενης Θ.Ενότητας Επισκόπηση επόμενης Θ.Ενότητας Πήγαινε κάτω

Άρθρο #8: Δείκτες

Δημοσίευση από GReaper Την / Το Τρι Σεπ 04, 2012 4:47 am

Δείκτης ονομάζεται ο μη αρνητικός ακέραιος ο οποίος "δείχνει" προς κάποια θέση στη μνήμη, δηλαδή αν ένας δείκτης έχει τιμή 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. Πολλές δομές δεδομένων όπως συνδεδεμένες λίστες, δυαδικά δέντρα κτλ χρειάζονται δείκτες για να λειτουργήσουν.


GReaper
Admin

Αριθμός μηνυμάτων : 16
Ημερομηνία εγγραφής : 01/10/2011
Ηλικία : 25
Τόπος : Σπάρτη

http://procorn.forumgreek.com

Επιστροφή στην κορυφή Πήγαινε κάτω

Επισκόπηση προηγούμενης Θ.Ενότητας Επισκόπηση επόμενης Θ.Ενότητας Επιστροφή στην κορυφή


 
Δικαιώματα σας στην κατηγορία αυτή
Δεν μπορείτε να απαντήσετε στα Θέματα αυτής της Δ.Συζήτησης