1 00:00:00,000 --> 00:00:03,080 >> SPEAKER 1: Ukazuje sa, že môžeme úspešne zameniť hodnoty v dvoch 2 00:00:03,080 --> 00:00:07,670 premenné podľa ich odovzdávanie do Funkcia nie je hodnotou alebo kópiu, ale 3 00:00:07,670 --> 00:00:10,390 odkazom alebo ich adresy. 4 00:00:10,390 --> 00:00:12,740 Inými slovami, musíme využiť niečo, známy ako ukazovateľ. 5 00:00:12,740 --> 00:00:15,580 Ukazovateľ, naozaj, je len adresa nejaké premenné. 6 00:00:15,580 --> 00:00:19,660 A tak ak budeme poskytovať funkcie nazýva, povedzme, prehodiť s adresou 7 00:00:19,660 --> 00:00:23,550 variabilný a adresu iného variabilný, výmena by mala byť oprávnená 8 00:00:23,550 --> 00:00:26,090 prejsť na každý z týchto adries a skutočne zmeniť 9 00:00:26,090 --> 00:00:27,360 hodnoty, ktoré sú tam. 10 00:00:27,360 --> 00:00:28,890 >> Poďme sa pozrieť, to v kontexte. 11 00:00:28,890 --> 00:00:31,360 Poďme reimplement výmenu takto. 12 00:00:31,360 --> 00:00:35,810 Po prvé, poďme zmeniť nebyť int ale, že je ukazovateľ na int, alebo 13 00:00:35,810 --> 00:00:36,920 adresa int. 14 00:00:36,920 --> 00:00:40,820 Tak poďme urobiť to isté pre b, meniace sa to z int na ukazovateľ na 15 00:00:40,820 --> 00:00:42,780 int alebo adresa int. 16 00:00:42,780 --> 00:00:45,860 >> Potom sa vo vnútri swapu, poďme ešte Prehlasujem, tmp, takže máme 17 00:00:45,860 --> 00:00:47,810 dočasné miesto pre to hodnotu. 18 00:00:47,810 --> 00:00:52,430 Ale to nie je hodnota sama o sebe, pretože, Opäť platí, že je teraz adresa 19 00:00:52,430 --> 00:00:53,270 nejaké int. 20 00:00:53,270 --> 00:00:57,320 Takže ak chceme ísť na túto adresu a dostať int na tejto adrese, máme 21 00:00:57,320 --> 00:01:03,020 dereferencia tohto ukazovateľa, a to aj formou Prevádzkovateľ hviezda, písanie hviezda A. 22 00:01:03,020 --> 00:01:05,470 >> Ďalej, nechcem meniť hodnota. 23 00:01:05,470 --> 00:01:08,770 Chcem zmeniť hodnotu na , Majúc na pamäti, znova, 24 00:01:08,770 --> 00:01:10,350 , Že je adresa. 25 00:01:10,350 --> 00:01:14,050 Takže k tomu, ja zase potrebovať povedať, hviezda dostane. 26 00:01:14,050 --> 00:01:18,360 A teraz chcem, aby hodnoty že je v B, nie hodnota B, ktorá 27 00:01:18,360 --> 00:01:19,720 je tiež adresa. 28 00:01:19,720 --> 00:01:22,280 >> Takže znovu hovorím, hviezda b. 29 00:01:22,280 --> 00:01:26,690 Potom sa v mojom poslednom riadku, musím prepísať to, čo je na adrese b sa 30 00:01:26,690 --> 00:01:28,970 čo bolo na pôvodnom mieste je. 31 00:01:28,970 --> 00:01:32,910 Ak to chcete, že som to hviezda b dostane tmp. 32 00:01:32,910 --> 00:01:34,820 >> Teraz sa na konci dňa, to funkcia je stále len 33 00:01:34,820 --> 00:01:35,950 tri riadky kódu. 34 00:01:35,950 --> 00:01:39,860 Ale pretože je to manipulácia hodnoty prostredníctvom ich adresy a nie 35 00:01:39,860 --> 00:01:43,700 surovej hodnoty, ktoré boli odovzdané do funkcie, tvrdím, že swap je teraz 36 00:01:43,700 --> 00:01:47,670 právomoc zmeniť hodnoty, ktoré sú odovzdané v cez ich adresy. 37 00:01:47,670 --> 00:01:49,510 >> Ale musím urobiť jednu zmenu v pokoji. 38 00:01:49,510 --> 00:01:52,190 Už nemôžem odovzdať x a y sa. 39 00:01:52,190 --> 00:01:55,030 Musím prejsť v adresách x a y. 40 00:01:55,030 --> 00:01:58,160 A k tomu, že potrebujem nejaký mierne iný zápis až hore. 41 00:01:58,160 --> 00:02:02,510 Chcem vymeniť x a y odovzdaním v adresa x, čo je indikované 42 00:02:02,510 --> 00:02:07,190 ampersand x, a adresu y, čo je indikované ampersand y. 43 00:02:07,190 --> 00:02:10,570 >> Rovnako tak, až hore teraz potrebujem, aby zmeniť prototyp funkcie, aby 44 00:02:10,570 --> 00:02:14,980 zodpovedajú zmeny, ktoré som urobil, takže je opäť ukazovateľ na int. 45 00:02:14,980 --> 00:02:17,190 b je opäť ukazovateľ na int. 46 00:02:17,190 --> 00:02:18,770 A teraz môžem zachrániť svoju súbor. 47 00:02:18,770 --> 00:02:20,680 A poďme skompilujte a spustite ho. 48 00:02:20,680 --> 00:02:25,330 >> Uistite sa výmena bodka lomítko swapu. 49 00:02:25,330 --> 00:02:29,660 A tentoraz, x a y sú naozaj teraz vymeniť tak, aby ich hodnoty nie sú 50 00:02:29,660 --> 00:02:31,950 1 a 2, ale 2 a 1. 51 00:02:31,950 --> 00:02:34,900