1 00:00:00,000 --> 00:00:00,320 2 00:00:00,320 --> 00:00:02,700 >> David J. MALAN: Chcę napisać program w które staramy się zamienić wartości 3 00:00:02,700 --> 00:00:04,970 dwie zmienne X i Y. 4 00:00:04,970 --> 00:00:07,490 Z góry, napisałem wiele tego programu już. 5 00:00:07,490 --> 00:00:11,130 Po pierwsze, oświadczam zmiennej x, i przechowywać w niej wartości 1. 6 00:00:11,130 --> 00:00:14,120 Następnie Oświadczam zmiennej Y i przechowywać w niej wartości, 2. 7 00:00:14,120 --> 00:00:17,700 >> Następnie kontynuuj printf aby wyświetlić wartości tych dwóch zmiennych. 8 00:00:17,700 --> 00:00:21,090 Potem twierdzą z innym printf być zamiana tych zmiennych. 9 00:00:21,090 --> 00:00:23,690 Potem wywołać funkcję o nazwie Swap. 10 00:00:23,690 --> 00:00:26,100 A potem twierdzą, że zmienne zostały zamienione. 11 00:00:26,100 --> 00:00:30,610 A następnie wydrukować, że to, co twierdzą są nowe wartości x i y. 12 00:00:30,610 --> 00:00:32,030 >> Teraz co to jest funkcja wymiany? 13 00:00:32,030 --> 00:00:34,970 To nie jest coś, co przychodzi z C. Rzeczywiście, jeśli spojrzymy na szczycie mojej 14 00:00:34,970 --> 00:00:38,850 plik, można zauważyć, że już zgłoszone Prototyp tej funkcji konwersji 15 00:00:38,850 --> 00:00:42,750 podając, że ma dwa ints, arbitralnie zwany b, a to 16 00:00:42,750 --> 00:00:44,300 Funkcja nie zwraca niczego. 17 00:00:44,300 --> 00:00:48,370 Więc zapewne, że robi to, co mówi w swapów wartości A i B. 18 00:00:48,370 --> 00:00:50,170 Załóżmy teraz wdrożyć swapa. 19 00:00:50,170 --> 00:00:53,820 >> Po pierwsze, mam zamiar zadeklarować tymczasowy zmienną i przypisać do niego 20 00:00:53,820 --> 00:00:57,260 wartość, choć mogłem tylko jak łatwo przechowywać w to b. 21 00:00:57,260 --> 00:01:00,925 Ja to się zmieni wartość z jest równa w b. 22 00:01:00,925 --> 00:01:04,849 I wtedy wreszcie, mam zamiar zmienić wartość b, aby być tym, czym był, ale jest 23 00:01:04,849 --> 00:01:06,340 teraz w temp. 24 00:01:06,340 --> 00:01:08,910 >> Teraz twierdzą, co właśnie zrobił jest logicznie poprawne. 25 00:01:08,910 --> 00:01:12,780 Mam zapisane w zmiennej tymczasowej, zmianie wartości należy się B, a następnie 26 00:01:12,780 --> 00:01:15,580 zmienił wartość B jest to, co było. 27 00:01:15,580 --> 00:01:18,620 Ale kiedy skompilować i uruchomić ten Program, martwię się, że nie jest 28 00:01:18,620 --> 00:01:20,140 będzie to, co widzę. 29 00:01:20,140 --> 00:01:21,625 >> Uczynić, nie swapa. 30 00:01:21,625 --> 00:01:24,350 kropka slash, nie swapa. 31 00:01:24,350 --> 00:01:27,560 I niestety, zgodnie z printf, wartość x i y, nawet 32 00:01:27,560 --> 00:01:31,560 po tym, jak twierdzą, nie wymieniając je, jest jeszcze 1 i 2. 33 00:01:31,560 --> 00:01:32,630 >> Teraz to dlaczego? 34 00:01:32,630 --> 00:01:36,160 Cóż, okazuje się, że w głównym, kiedy Swap wywołać tę funkcję, przekazując 35 00:01:36,160 --> 00:01:39,960 x i y jako argumenty, to faktycznie kopie z X i Y, które 36 00:01:39,960 --> 00:01:41,310 przekazywane są do wymiany. 37 00:01:41,310 --> 00:01:45,430 Mianowicie, ich wartości 1 i 2 przedstawiają przeszedł do wymiany jak i b.. 38 00:01:45,430 --> 00:01:48,590 I to i b, że jesteśmy ostatecznie zamiana w głównym. 39 00:01:48,590 --> 00:01:50,810 >> To znaczy, 1 wynosi 2, 2 staje 1. 40 00:01:50,810 --> 00:01:54,630 Ale ponieważ wymiany nie zwraca wartości i dlatego, że otrzymała kopie x. 41 00:01:54,630 --> 00:01:58,220 i y, to zachowanie brak wpływu na x i y. 42 00:01:58,220 --> 00:02:02,610 Rzeczywiście, o zakresie i b są, że tak powiem, do wymiany, a X i Y pozostają 43 00:02:02,610 --> 00:02:03,990 obejmuje zasięgiem główne. 44 00:02:03,990 --> 00:02:05,070 >> Więc mamy problem. 45 00:02:05,070 --> 00:02:06,320 Ale, jak to naprawić? 46 00:02:06,320 --> 00:02:08,312