Βίντεο: Differential equations, studying the unsolvable | DE1 2024
Στο προγραμματισμό C, αποκαλύπτεται πρώτα ο τύπος και το μέγεθος της μεταβλητής, δηλώνοντας την μεταβλητή ως συγκεκριμένο τύπο, αλλά και χρησιμοποιώντας το μέγεθος της λέξης-κλειδιού. Η δεύτερη περιγραφή μιας μεταβλητής, τα περιεχόμενά της, μπορεί να συλλεχθεί διαβάζοντας την τιμή της μεταβλητής χρησιμοποιώντας την κατάλληλη λειτουργία γλώσσας C.
Η τρίτη περιγραφή μιας μεταβλητής είναι η θέση της στη μνήμη. Συγκεντρώσατε αυτές τις πληροφορίες χρησιμοποιώντας το χειριστή & και το σύμβολο κράτησης% p, όπως φαίνεται στην ενότητα Μεταβλητή, Γιατί είστε τέλειος;
O ΜΕΤΑΒΛΗΤΟ, ΠΟΥ ΤΕΧΝΕΙ ΤΩΡΑ;
#include int κύρια () {char c = 'c'; int i = 123; float f = 98. 6; διπλό d = 6. 022E23. printf ("Διεύθυνση του 'c'% pn ', & c); printf ("Διεύθυνση του" i "% pn", & i); printf ("Διεύθυνση του 'f'% pn ', & f); printf ("Διεύθυνση του 'd'% pn ', & d); return (0)?}
Όταν ο χειριστής & προθέτει μια μεταβλητή, επιστρέφει μια τιμή που αντιπροσωπεύει τη διεύθυνση της μεταβλητής, ή τη θέση της στη μνήμη. Η τιμή αυτή εκφράζεται σε δεκαεξαδικό. Για να δείτε αυτή την τιμή, χρησιμοποιείται ο χαρακτήρας μετατροπής% p, όπως φαίνεται στο O Μεταβλητή, Γιατί Art thou?
Άσκηση 1 : Πληκτρολογήστε τον πηγαίο κώδικα από την O Μεταβλητή, Γιατί Art thou? στο συντάκτη σας. Κατασκευάστε και τρέξτε.
Τα αποτελέσματα που παράγονται από το πρόγραμμα που δημιουργείται από την Άσκηση 1 είναι μοναδικά, όχι μόνο για κάθε υπολογιστή αλλά επίσης, ενδεχομένως, για κάθε φορά που εκτελείται το πρόγραμμα.
Διεύθυνση του «c» 0x7fff5fbff8ff Διεύθυνση του «i» 0x7fff5fbff8f8 Διεύθυνση του 'f' 0x7fff5fbff8f4 Διεύθυνση του 'd' 0x7fff5fbff8e8
Η μεταβλητή c αποθηκεύεται στη μνήμη στη θέση 0x7fff5fbff8ff -, 734, 799, 804, 671. Και οι δύο τιμές είναι τετριμμένες, βέβαια. ο υπολογιστής παρακολουθεί τις θέσεις μνήμης, κάτι που είναι πολύ καλό από μένα.
Αυτή η εικόνα δείχνει πώς αυτές οι διευθύνσεις απεικονίζονται στη μνήμη.
Τα μεμονωμένα στοιχεία συστοιχιών έχουν επίσης θέσεις μνήμης, όπως φαίνεται στις θέσεις μνήμης σε μια συστοιχία γραμμής 10. Ο χειριστής & προθέτει την μεταβλητή συγκεκριμένου στοιχείου, βήχοντας μια διεύθυνση. Ο χαρακτήρας μετατροπής% p στη λειτουργία printf () εμφανίζει τη διεύθυνση.
ΤΟΠΟΘΕΤΗΣΕΙΣ ΜΝΗΜΕΙΩΝ ΣΕ ΑΡΧΑΙΟ
#include int main () {char hello [] = "Γεια σας!"; int i = 0; ενώ (hello [i]) {printf ("% c στο% pn", γεια [i], & hello [i]); i ++;} επιστροφή (0)?}
Άσκηση 2 : Δημιουργήστε ένα νέο έργο χρησιμοποιώντας τον πηγαίο κώδικα που εμφανίζεται στις Θέσεις μνήμης σε έναν πίνακα. Κατασκευάστε και τρέξτε.
Και πάλι, η έξοδος θέσης μνήμης είναι μοναδική σε κάθε υπολογιστή.
H στο 0x7fff5fbff8f0 e στο 0x7fff5fbff8f1 l στο 0x7fff5fbff8f2 l στο 0x7fff5fbff8f3 o στο 0x7fff5fbff8f4!στο 0x7fff5fbff8f5
Σε αντίθεση με το παράδειγμα από την Άσκηση 1, οι διευθύνσεις που δημιουργούνται από την Άσκηση 2 είναι συνεχόμενες στη μνήμη, ένα byte μετά το άλλο.
Άσκηση 3 : Κωδικοποιήστε ένα πρόγραμμα για την εμφάνιση πέντε τιμών σε μια συστοιχία int μαζί με τη διεύθυνση μνήμης κάθε στοιχείου. Μπορείτε να χρησιμοποιήσετε τις τοποθεσίες μνήμης σε μια συστοιχία για να σας εμπνεύσει, παρόλο που ένα βρόχο για το κορδόνι μπορεί να είναι πιο εύκολο να κωδικοποιηθεί.
-
Παρεμπιπτόντως, ο χειριστής της θέσης μνήμης θα πρέπει να είναι εξοικειωμένος με εσάς. Χρησιμοποιείται από τη λειτουργία scanf (), η οποία απαιτεί τη διεύθυνση μιας μεταβλητής, όχι την ίδια τη μεταβλητή. Αυτό συμβαίνει επειδή το scanf () τοποθετεί απευθείας μια τιμή σε μια θέση μνήμης. Πως? Χρησιμοποιώντας τους δείκτες, φυσικά!
-
Ο χειριστής & είναι επίσης ο bitwise τελεστής AND. Ωστόσο, ο μεταγλωττιστής είναι αρκετά έξυπνος για να πει πότε & προθέτει μια μεταβλητή και πότε & είναι μέρος μιας δυαδικής μαθηματικής εξίσωσης.