>> ΟΜΙΛΗΤΗΣ 1: Αποδεικνύεται μπορούμε ανταλλάξουν με επιτυχία τις τιμές σε δύο
μεταβλητές με το πέρασμα τους σε ένα λειτουργούν όχι με την αξία ή από την αντιγραφή, αλλά
με αναφορά ή με τις διευθύνσεις τους.
Με άλλα λόγια, θα πρέπει να κινητοποιήσει κάτι που είναι γνωστό ως δείκτη.
Ένας δείκτης, πραγματικά, είναι μόνο η διεύθυνση κάποιας μεταβλητής.
Και έτσι, αν παρέχουμε μια λειτουργία που ονομάζεται, ας πούμε, να ανταλλάξουν με τη διεύθυνση του
μία μεταβλητή και η διεύθυνση του άλλου μεταβλητή, swap θα πρέπει να εξουσιοδοτηθεί να
πηγαίνετε σε κάθε ένα από αυτές τις διευθύνσεις και πραγματικά να αλλάξει το
αξίες που υπάρχουν.
>> Ας δούμε αυτό το πλαίσιο.
Ας Νέα υλοποίηση ανταλλαγής ως εξής.
Κατ 'αρχάς, ας αλλάξουμε ένα δεν πρέπει να είναι int αλλά για να είναι ένας δείκτης σε int ή η
διεύθυνση ενός int.
Στη συνέχεια, ας κάνουμε το ίδιο για το β, αλλάζοντας την από int να είναι ένας δείκτης σε μια
int ή η διεύθυνση ενός int.
>> Στη συνέχεια, στο εσωτερικό της swap, ας ακόμα δηλώνουν tmp έτσι ώστε να έχουμε μια
προσωρινή θέση για την αξία του.
Αλλά μια τιμή του δεν είναι η ίδια, διότι, Και πάλι, ένα είναι τώρα η διεύθυνση
κάποια int.
Έτσι, αν θέλουμε να πάμε σε αυτή τη διεύθυνση και να πάρει int σε αυτή τη διεύθυνση, έχουμε
dereference από αυτόν τον δείκτη, επίσης, μέσω της ο χειριστής αστέρι, γράφοντας ένα αστέρι.
>> Στη συνέχεια, δεν θέλω να αλλάξει η τιμή του a.
Θέλω να αλλάξω την τιμή σε α, έχοντας κατά νου, και πάλι,
ότι ένα είναι μια διεύθυνση.
Να το πράξουν, θα πρέπει και πάλι να πω ένα αστέρι παίρνει.
Και τώρα θέλω να βάλω στην αξία ότι είναι σε b, δεν είναι η τιμή του b, το οποίο
Επίσης είναι μια διεύθυνση.
>> Έτσι και πάλι λέω, αστέρι b.
Στη συνέχεια, στην τελευταία γραμμή μου, εγώ πρέπει να αντικαταστήσετε ό, τι είναι στη διεύθυνση b με
ό, τι ήταν σε μια αρχική θέση του.
Για να γίνει αυτό, να κάνω αστέρι b παίρνει tmp.
>> Τώρα, στο τέλος της ημέρας, αυτό η λειτουργία εξακολουθεί να είναι απλά
τρεις γραμμές κώδικα.
Αλλά επειδή είναι χειραγωγώντας τις τιμές μέσω της διεύθυνσης και όχι η
πρώτες τιμές που είχαν περάσει μέσα η λειτουργία, εγώ ισχυρίζομαι ότι swap είναι τώρα
εξουσιοδοτηθεί να αλλάξετε τις τιμές που πέρασε στο μέσω διευθύνσεις τους.
>> Αλλά πρέπει να κάνω μια αλλαγή ακόμα.
Δεν μπορώ πλέον να περάσει στην x και y οι ίδιοι.
Θα πρέπει να περάσει στις διευθύνσεις x και y.
Και για να το κάνουμε αυτό, χρειάζομαι κάποια ελαφρά διαφορετικό συμβολισμό επάνω στην κορυφή.
Θέλω να ανταλλάξουν x και y με το πέρασμα στην η διεύθυνση του x, που υποδεικνύεται με
εμπορικό x, και η διεύθυνση του y, που υποδεικνύεται από εμπορικό y.
>> Ομοίως, επάνω στην κορυφή τώρα χρειάζεται να αλλάξετε το πρωτότυπο της συνάρτησης σε
ταιριάζουν με την αλλαγή που έχω κάνει, έτσι ώστε να α είναι, και πάλι, ένας δείκτης σε int.
b είναι, και πάλι, ένας δείκτης σε int.
Και τώρα μπορώ να αποθηκεύσετε το αρχείο μου.
Και ας μεταγλωττίσετε και να το εκτελέσετε.
>> Κάντε dot ανταλλαγής κάθετο swap.
Και αυτή τη φορά, τα Χ και Υ είναι πράγματι τώρα αντάλλαξαν έτσι ώστε οι τιμές τους δεν είναι
1 και 2, αλλά και 2 1.