Ο Τελεστής & στη C και η συνάρτηση scanf()
Ο Τελεστής & στη C, χρησιμοποιείται στη συνάρτηση scanf(), για να καταχωρεί τιμές σε μεταβλητές του καλούντος προγράμματος.
Ο τελεστής & στη C μας δίνει τη διεύθυνση στην οποία αποθηκεύεται μια μεταβλητή. Για παράδειγμα, αν p είναι το όνομα μιας μεταβλητής, τότε &p είναι η διεύθυνση της μεταβλητής p στη μνήμη.
Αν η μεταβλητή p έχει τιμή 100 και είναι αποθηκευμένη στη διεύθυνση 15879, τότε η παρακάτω πρόταση :
printf(“%d %u\n”, p, &p);
θα δώσει το εξής αποτέλεσμα :
100 15879
Ο Τελεστής & στη C – Παράδειγμα
Ακολουθεί ένα πρόγραμμα, που χρησιμοποιεί τον τελεστή διεύθυνσης & για να βρει πού φυλάσσονται μεταβλητές με το ίδιο όνομα, οι οποίες ανήκουν σε διαφορετικές συναρτήσεις.
/* έλεγχος για το πού βρίσκονται αποθηκευμένες μεταβλητές */ #include <stdio.h> void myfunction(); /* δήλωση συνάρτησης */ main(){ int p=2, b=5; printf("Στη main(), p = %d και &p = %p \n", p, &p); printf("Στη main(), b = %d και &b = %p \n", b, &b); myfunction(p); } void myfunction(b); /* ορισμός συνάρτησης */{ int b; int p = 10; printf("Στη mikado(), p = %d και &p = %p \n", p, &p); printf("Στη mikado(), b = %d και &b = %p \n", b, &b); }
Χρησιμοποιήσαμε εδώ τη μορφή %p για την εκτύπωση των διευθύνσεων· αν, όμως, το σύστημά μας δεν διαθέτει αυτή τη μορφή, τότε μπορούμε να δοκιμάσουμε με τη μορφή %u.
Το αποτέλεσμα του προηγούμενου προγράμματος θα είναι το εξής :
Στη main(), p = 2 και &p = FFD8
Στη main(), b = 5 και &b = FFDA
Στη myfunction(), p = 10 και &p = FFD0
Στη myfunction(), b = 2 και &b = FFD6
Οι διευθύνσεις εμφανίζονται εδώ σε 16δική μορφή. Από το αποτέλεσμα βλέπουμε ότι οι δύο μεταβλητές p έχουν διαφορετικές διευθύνσεις, όπως και οι δύο μεταβλητές b. Δηλαδή, ο υπολογιστής τις θεωρεί σαν τέσσερις ξεχωριστές μεταβλητές.