Δείκτες παράμετροι συναρτήσεων

Μέχρι τώρα συνατήσαμε παραμέτρους δύο ειδών: τις παραμέτρους τιμής που 
αναφέρονται σε απλά δεδομένα (αριθμούς, χαρακτήρες) και τις παραμέτρους 
αναφοράς που αναφέρονται σε πίνακες. Οι παράμετροι τιμής δεν μπορούν να 
επιστρέψουν τιμή από μιά συνάρτηση, σε αντίθεση με τις παραμέτρους αναφοράς. 
Η λογική των παραμέτρων αναφοράς στηρίζεται, όπως είδαμε, στο πέρασμα της 
διέυθυνσης της μεταβλητής αντί γιά το πέρασμα της τιμής της μεταβλητής. Τώρα 
που γνωρίζουμε οτι τα ονόματα των πινάκων είναι στην ουσία ονόματα δεικτών 
είναι φανερό γιατί ο μηχανισμός αυτός υλοποιείται τόσο άμεσα στους πίνακες. 
Όμως, την στιγμή που έχουμε πιά δεί οτι μπορεί να οριστεί δείκτης γιά 
οποιαδήποτε βαθμωτή μεταβλητή, όχι μόνο γιά πίνακα, ο μηχανισμός της 
παραμέτριου αναφοράς μπορεί να επεκτασθεί σε κάθε μεταβλητή. 

Το πρόγραμμα που βρίσκεται αποθηκευμένο στο αρχείο TWOWAY.C δίνει ένα 
τέτοιο παράδειγμα. Η συνάρτηση fixup δεν επιστρέφει καμμία τιμή με return 
και δέχεται δύο τυπικές παραμέτρους: την ακέραια τιμή nuts και τον δείκτη σε 
ακέραια μεταβλητή fruit. Το κυρίως πρόγραμμα είναι μάλλον απλό. 
Δηλώνονται δύο ακέραιες μεταβλητές, pecans,apples οι οποίες στη συνέχεια 
αρχικοποιούνται και οι τιμές τους εκτυπώνονται. Κατόπιν καλείται η συνάρτηση 
fixup με δύο πραγματικές παραμέτρους: την τιμή της ακέραιας μεταβλητής 
pecans και την διεύθυνση της ακέραιας μεταβλητής apples, δηλαδή &apples.

Είναι προφανές οτι η τιμή της μεταβλητής pecans συνδέεται με (εκχωρείται 
στη) παράμετρο nuts ενώ η διεύθυνση της μεταβλητής apples εκχωρείται στη 
παράμετρο fruits. Με αυτό το τρόπο η μεταβλητή pecans είναι απομονωμένη 
από τις τροποποιήσεις που θα υποστεί η παράμετρος nuts με την εκτέλεση της 
συνάρτησης φού απλά εκχώρησε την τρέχουσα τιμή της αλλά όχι τη διεύθυνσή 
της. Αντίθετα η μεταβλητή apples υφίσταται απ'ευθείας τις τροποποιήσεις που 
τυχόν θα συμβούν στη συνάρτηση αφού αυτό που εκχωρήθηκς είναι η διέυθυνσή 
της μέσω του δείκτη fruit. Τα παραπάνω φαίνονται στο σχήμα που ακολουθεί

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

*nuts = 135; ή &nuts = 135; ή &fruit = 172; ή fruit = 172;
   
θα είχαμε ουσιαστική διαμαρτυρία από τον μεταφραστή γιά διάφορους λόγους 
(μπορείτε να βρείτε ορισμενους ;). Τελικά εκτυπώνουμε τις τροποποιημένες τιμές 
των παραμέτρων και επιστρέφουμε στο κυρίως πρόγραμμα. Εκεί απλά 
ξανατυπώνουμε τις τιμές των μεταβλητών. Το αποτέλεσμα φαίνεται παρακάτω. 

Διαπιστώνουμε οτι, όπως ήδη εξηγήσαμε, η παράμετρος nuts πάιρνει την τιμή 
της μεταβλητής pecans κατά την κλήση της συνάρτησης αλλά δεν επηρρεάζει 
την μεταβλητή στη συνέχεια. Αντίθετα η μεταβλητή apples επηρρεάζεται 
συνεχώς μέσω του δείκτη fruits.

The starting values are 100 101
The values are 100 101
The values are 135 172
The ending values are 100 172

Περιεχόμενα Κεφαλαίου