1 00:00:00,000 --> 00:00:03,080 >> ΟΜΙΛΗΤΗΣ 1: Αποδεικνύεται μπορούμε ανταλλάξουν με επιτυχία τις τιμές σε δύο 2 00:00:03,080 --> 00:00:07,670 μεταβλητές με το πέρασμα τους σε ένα λειτουργούν όχι με την αξία ή από την αντιγραφή, αλλά 3 00:00:07,670 --> 00:00:10,390 με αναφορά ή με τις διευθύνσεις τους. 4 00:00:10,390 --> 00:00:12,740 Με άλλα λόγια, θα πρέπει να κινητοποιήσει κάτι που είναι γνωστό ως δείκτη. 5 00:00:12,740 --> 00:00:15,580 Ένας δείκτης, πραγματικά, είναι μόνο η διεύθυνση κάποιας μεταβλητής. 6 00:00:15,580 --> 00:00:19,660 Και έτσι, αν παρέχουμε μια λειτουργία που ονομάζεται, ας πούμε, να ανταλλάξουν με τη διεύθυνση του 7 00:00:19,660 --> 00:00:23,550 μία μεταβλητή και η διεύθυνση του άλλου μεταβλητή, swap θα πρέπει να εξουσιοδοτηθεί να 8 00:00:23,550 --> 00:00:26,090 πηγαίνετε σε κάθε ένα από αυτές τις διευθύνσεις και πραγματικά να αλλάξει το 9 00:00:26,090 --> 00:00:27,360 αξίες που υπάρχουν. 10 00:00:27,360 --> 00:00:28,890 >> Ας δούμε αυτό το πλαίσιο. 11 00:00:28,890 --> 00:00:31,360 Ας Νέα υλοποίηση ανταλλαγής ως εξής. 12 00:00:31,360 --> 00:00:35,810 Κατ 'αρχάς, ας αλλάξουμε ένα δεν πρέπει να είναι int αλλά για να είναι ένας δείκτης σε int ή η 13 00:00:35,810 --> 00:00:36,920 διεύθυνση ενός int. 14 00:00:36,920 --> 00:00:40,820 Στη συνέχεια, ας κάνουμε το ίδιο για το β, αλλάζοντας την από int να είναι ένας δείκτης σε μια 15 00:00:40,820 --> 00:00:42,780 int ή η διεύθυνση ενός int. 16 00:00:42,780 --> 00:00:45,860 >> Στη συνέχεια, στο εσωτερικό της swap, ας ακόμα δηλώνουν tmp έτσι ώστε να έχουμε μια 17 00:00:45,860 --> 00:00:47,810 προσωρινή θέση για την αξία του. 18 00:00:47,810 --> 00:00:52,430 Αλλά μια τιμή του δεν είναι η ίδια, διότι, Και πάλι, ένα είναι τώρα η διεύθυνση 19 00:00:52,430 --> 00:00:53,270 κάποια int. 20 00:00:53,270 --> 00:00:57,320 Έτσι, αν θέλουμε να πάμε σε αυτή τη διεύθυνση και να πάρει int σε αυτή τη διεύθυνση, έχουμε 21 00:00:57,320 --> 00:01:03,020 dereference από αυτόν τον δείκτη, επίσης, μέσω της ο χειριστής αστέρι, γράφοντας ένα αστέρι. 22 00:01:03,020 --> 00:01:05,470 >> Στη συνέχεια, δεν θέλω να αλλάξει η τιμή του a. 23 00:01:05,470 --> 00:01:08,770 Θέλω να αλλάξω την τιμή σε α, έχοντας κατά νου, και πάλι, 24 00:01:08,770 --> 00:01:10,350 ότι ένα είναι μια διεύθυνση. 25 00:01:10,350 --> 00:01:14,050 Να το πράξουν, θα πρέπει και πάλι να πω ένα αστέρι παίρνει. 26 00:01:14,050 --> 00:01:18,360 Και τώρα θέλω να βάλω στην αξία ότι είναι σε b, δεν είναι η τιμή του b, το οποίο 27 00:01:18,360 --> 00:01:19,720 Επίσης είναι μια διεύθυνση. 28 00:01:19,720 --> 00:01:22,280 >> Έτσι και πάλι λέω, αστέρι b. 29 00:01:22,280 --> 00:01:26,690 Στη συνέχεια, στην τελευταία γραμμή μου, εγώ πρέπει να αντικαταστήσετε ό, τι είναι στη διεύθυνση b με 30 00:01:26,690 --> 00:01:28,970 ό, τι ήταν σε μια αρχική θέση του. 31 00:01:28,970 --> 00:01:32,910 Για να γίνει αυτό, να κάνω αστέρι b παίρνει tmp. 32 00:01:32,910 --> 00:01:34,820 >> Τώρα, στο τέλος της ημέρας, αυτό η λειτουργία εξακολουθεί να είναι απλά 33 00:01:34,820 --> 00:01:35,950 τρεις γραμμές κώδικα. 34 00:01:35,950 --> 00:01:39,860 Αλλά επειδή είναι χειραγωγώντας τις τιμές μέσω της διεύθυνσης και όχι η 35 00:01:39,860 --> 00:01:43,700 πρώτες τιμές που είχαν περάσει μέσα η λειτουργία, εγώ ισχυρίζομαι ότι swap είναι τώρα 36 00:01:43,700 --> 00:01:47,670 εξουσιοδοτηθεί να αλλάξετε τις τιμές που πέρασε στο μέσω διευθύνσεις τους. 37 00:01:47,670 --> 00:01:49,510 >> Αλλά πρέπει να κάνω μια αλλαγή ακόμα. 38 00:01:49,510 --> 00:01:52,190 Δεν μπορώ πλέον να περάσει στην x και y οι ίδιοι. 39 00:01:52,190 --> 00:01:55,030 Θα πρέπει να περάσει στις διευθύνσεις x και y. 40 00:01:55,030 --> 00:01:58,160 Και για να το κάνουμε αυτό, χρειάζομαι κάποια ελαφρά διαφορετικό συμβολισμό επάνω στην κορυφή. 41 00:01:58,160 --> 00:02:02,510 Θέλω να ανταλλάξουν x και y με το πέρασμα στην η διεύθυνση του x, που υποδεικνύεται με 42 00:02:02,510 --> 00:02:07,190 εμπορικό x, και η διεύθυνση του y, που υποδεικνύεται από εμπορικό y. 43 00:02:07,190 --> 00:02:10,570 >> Ομοίως, επάνω στην κορυφή τώρα χρειάζεται να αλλάξετε το πρωτότυπο της συνάρτησης σε 44 00:02:10,570 --> 00:02:14,980 ταιριάζουν με την αλλαγή που έχω κάνει, έτσι ώστε να α είναι, και πάλι, ένας δείκτης σε int. 45 00:02:14,980 --> 00:02:17,190 b είναι, και πάλι, ένας δείκτης σε int. 46 00:02:17,190 --> 00:02:18,770 Και τώρα μπορώ να αποθηκεύσετε το αρχείο μου. 47 00:02:18,770 --> 00:02:20,680 Και ας μεταγλωττίσετε και να το εκτελέσετε. 48 00:02:20,680 --> 00:02:25,330 >> Κάντε dot ανταλλαγής κάθετο swap. 49 00:02:25,330 --> 00:02:29,660 Και αυτή τη φορά, τα Χ και Υ είναι πράγματι τώρα αντάλλαξαν έτσι ώστε οι τιμές τους δεν είναι 50 00:02:29,660 --> 00:02:31,950 1 και 2, αλλά και 2 1. 51 00:02:31,950 --> 00:02:34,900