1 00:00:00,000 --> 00:00:00,320 2 00:00:00,320 --> 00:00:02,700 >> DAVID J. MALAN: Lassen Sie uns ein Programm schreiben, in was wir versuchen, die Werte der Swap 3 00:00:02,700 --> 00:00:04,970 zwei Variablen, x und y. 4 00:00:04,970 --> 00:00:07,490 Im Vorfeld habe ich viel geschrieben dieses Programm bereits. 5 00:00:07,490 --> 00:00:11,130 Zuerst erkläre ich eine Variable, x, und speichern Sie es in den Wert, 1. 6 00:00:11,130 --> 00:00:14,120 Dann erkläre ich Größe y und speichern in den Wert, 2. 7 00:00:14,120 --> 00:00:17,700 >> Dann gehe ich mit printf angezeigt die Werte dieser beiden Variablen. 8 00:00:17,700 --> 00:00:21,090 Dann behaupte ich mit einem anderen printf zu werden, tauschen diese Variablen. 9 00:00:21,090 --> 00:00:23,690 Dann rufe ich eine Funktion namens Swap. 10 00:00:23,690 --> 00:00:26,100 Und dann behaupte ich, dass die Variablen vertauscht haben. 11 00:00:26,100 --> 00:00:30,610 Und dann drucke ich das, was ich behaupte, die neuen Werte von x und y. 12 00:00:30,610 --> 00:00:32,030 >> Nun, was ist diese Funktion Swap? 13 00:00:32,030 --> 00:00:34,970 Es ist nicht etwas, das mit C kommt In der Tat, wenn wir an der Spitze von meinem 14 00:00:34,970 --> 00:00:38,850 Datei, werden Sie feststellen, dass ich erklärt habe ein Prototyp für diese Funktion Swap 15 00:00:38,850 --> 00:00:42,750 die Angabe, dass es zwei Ganzzahlen, willkürlich genannt A und B, und das 16 00:00:42,750 --> 00:00:44,300 Funktion nichts zurückgibt. 17 00:00:44,300 --> 00:00:48,370 Daher ist anzunehmen, es tut, was es sagt in Swaps ein und b die Werte. 18 00:00:48,370 --> 00:00:50,170 Lassen Sie uns nun umsetzen Swap. 19 00:00:50,170 --> 00:00:53,820 >> Zunächst werde ich eine temporäre, zu erklären, Variable, und weisen es 20 00:00:53,820 --> 00:00:57,260 der Wert in eine, wenn auch ich konnte einfach wie leicht es in b gespeichert. 21 00:00:57,260 --> 00:01:00,925 Ich werde dann gehen, um den Wert zu ändern von a gleich der in b sein. 22 00:01:00,925 --> 00:01:04,849 Und dann schließlich, werde ich ändern Wert von b zu sein, was eine war, ist aber 23 00:01:04,849 --> 00:01:06,340 jetzt im Temp. 24 00:01:06,340 --> 00:01:08,910 >> Jetzt behaupte ich, was ich gerade gemacht habe ist logisch korrekt. 25 00:01:08,910 --> 00:01:12,780 I a in einer temporären Variablen gespeichert haben, verändert ein Wert b ist, und dann 26 00:01:12,780 --> 00:01:15,580 verändert den Wert b zu sein, was eine war. 27 00:01:15,580 --> 00:01:18,620 Aber wenn ich diese kompilieren und ausführen Programm, ich mache mir Sorgen, dass es nicht 28 00:01:18,620 --> 00:01:20,140 gehen, was ich sehe. 29 00:01:20,140 --> 00:01:21,625 >> Stellen, kein Swap. 30 00:01:21,625 --> 00:01:24,350 dot Schrägstrich, kein Swap. 31 00:01:24,350 --> 00:01:27,560 Und leider, nach printf, der Wert von x und y, sogar 32 00:01:27,560 --> 00:01:31,560 nachdem wir behaupten, tauschen sie ist immer noch 1 und 2. 33 00:01:31,560 --> 00:01:32,630 >> Nun, warum ist das so? 34 00:01:32,630 --> 00:01:36,160 Nun stellt sich heraus, dass in Haupt-, wenn wir rufen Sie diese Funktion swap, vorbei an 35 00:01:36,160 --> 00:01:39,960 x und y als Argumente, ist es eigentlich Kopien von x und y, die 36 00:01:39,960 --> 00:01:41,310 in Swap geleitet. 37 00:01:41,310 --> 00:01:45,430 Das heißt, die Werte 1 und 2 Swap als a und b übergeben. 38 00:01:45,430 --> 00:01:48,590 Und es ist a und b, dass wir letztlich Austausch in main. 39 00:01:48,590 --> 00:01:50,810 >> Dh 1 wird 2, 2 zu 1 wird. 40 00:01:50,810 --> 00:01:54,630 Aber weil Swap hat keinen Rückgabewert und weil sie empfangen Kopien x 41 00:01:54,630 --> 00:01:58,220 und y ist es Verhalten keine Wirkung auf die x und y. 42 00:01:58,220 --> 00:02:02,610 Ja, a und b sind alle Bereiche, sozusagen zu tauschen, wobei x und y bleiben 43 00:02:02,610 --> 00:02:03,990 Gültigkeitsbereich Haupt. 44 00:02:03,990 --> 00:02:05,070 >> So haben wir ein Problem. 45 00:02:05,070 --> 00:02:06,320 Aber wie man es beheben? 46 00:02:06,320 --> 00:02:08,312