1 00:00:00,000 --> 00:00:03,080 >> SPEAKER 1: Ukazuje se, že můžeme úspěšně zaměnit hodnoty ve dvou 2 00:00:03,080 --> 00:00:07,670 proměnné podle jejich předávání do Funkce není hodnotou nebo kopii, ale 3 00:00:07,670 --> 00:00:10,390 odkazem nebo jejich adresy. 4 00:00:10,390 --> 00:00:12,740 Jinými slovy, musíme využít něco, známý jako ukazatel. 5 00:00:12,740 --> 00:00:15,580 Ukazatel, opravdu, je jen adresa nějaké proměnné. 6 00:00:15,580 --> 00:00:19,660 A tak pokud budeme poskytovat funkce nazývá, řekněme, prohodit s adresou 7 00:00:19,660 --> 00:00:23,550 variabilní a adresu jiného variabilní, výměna by měla být zmocněna 8 00:00:23,550 --> 00:00:26,090 přejít na každý z těchto adres a skutečně změnit 9 00:00:26,090 --> 00:00:27,360 hodnoty, které jsou tam. 10 00:00:27,360 --> 00:00:28,890 >> Pojďme se podívat, to v kontextu. 11 00:00:28,890 --> 00:00:31,360 Pojďme reimplement výměnu takto. 12 00:00:31,360 --> 00:00:35,810 Za prvé, pojďme změnit nebýt int ale, že je ukazatel na int, nebo 13 00:00:35,810 --> 00:00:36,920 adresa int. 14 00:00:36,920 --> 00:00:40,820 Tak pojďme udělat to samé pro b, měnící se to z int na ukazatel na 15 00:00:40,820 --> 00:00:42,780 int nebo adresa int. 16 00:00:42,780 --> 00:00:45,860 >> Pak se uvnitř swapu, pojďme ještě Prohlašuji, tmp, takže máme 17 00:00:45,860 --> 00:00:47,810 dočasné místo pro to hodnotu. 18 00:00:47,810 --> 00:00:52,430 Ale to není hodnota sama o sobě, protože, Opět platí, že je nyní adresa 19 00:00:52,430 --> 00:00:53,270 nějaké int. 20 00:00:53,270 --> 00:00:57,320 Takže pokud chceme jít na tuto adresu a dostat int na této adrese, máme 21 00:00:57,320 --> 00:01:03,020 dereference tohoto ukazatele, a to i formou Provozovatel hvězda, psaní hvězda A. 22 00:01:03,020 --> 00:01:05,470 >> Dále, nechci měnit hodnota. 23 00:01:05,470 --> 00:01:08,770 Chci změnit hodnotu na , majíce na paměti, znovu, 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, já zase potřebovat říci, hvězda dostane. 26 00:01:14,050 --> 00:01:18,360 A teď chci, aby hodnoty že je v B, nikoli hodnota B, která 27 00:01:18,360 --> 00:01:19,720 je také adresa. 28 00:01:19,720 --> 00:01:22,280 >> Takže znovu říkám, hvězda b.. 29 00:01:22,280 --> 00:01:26,690 Pak se v mém posledním řádku, musím přepsat to, co je na adrese b se 30 00:01:26,690 --> 00:01:28,970 co bylo na původním místě je. 31 00:01:28,970 --> 00:01:32,910 Chcete-li to, že jsem to hvězda b dostane tmp. 32 00:01:32,910 --> 00:01:34,820 >> Nyní se na konci dne, to funkce je stále jen 33 00:01:34,820 --> 00:01:35,950 tři řádky kódu. 34 00:01:35,950 --> 00:01:39,860 Ale protože je to manipulace hodnoty prostřednictvím jejich adresy a nikoli 35 00:01:39,860 --> 00:01:43,700 surové hodnoty, které byly předány do funkce, tvrdím, že swap je nyní 36 00:01:43,700 --> 00:01:47,670 pravomoc změnit hodnoty, které jsou předány v přes jejich adresy. 37 00:01:47,670 --> 00:01:49,510 >> Ale musím udělat jednu změnu v klidu. 38 00:01:49,510 --> 00:01:52,190 Už nemůžu předat x a y se. 39 00:01:52,190 --> 00:01:55,030 Musím projít v adresách x a y. 40 00:01:55,030 --> 00:01:58,160 A k tomu, že potřebuji nějaký mírně jiný zápis až nahoře. 41 00:01:58,160 --> 00:02:02,510 Chci vyměnit x a y předáním v adresa x, což je indikováno 42 00:02:02,510 --> 00:02:07,190 ampersand x, a adresu y, což je indikováno ampersand y. 43 00:02:07,190 --> 00:02:10,570 >> Stejně tak, až nahoře teď potřebuji, aby změnit prototyp funkce, aby 44 00:02:10,570 --> 00:02:14,980 odpovídají změny, které jsem udělal, takže je opět ukazatel na int. 45 00:02:14,980 --> 00:02:17,190 b je opět ukazatel na int. 46 00:02:17,190 --> 00:02:18,770 A teď můžu zachránit svou soubor. 47 00:02:18,770 --> 00:02:20,680 A pojďme zkompilujte a spusťte jej. 48 00:02:20,680 --> 00:02:25,330 >> Ujistěte se výměna tečka lomítko swapu. 49 00:02:25,330 --> 00:02:29,660 A tentokrát, x a y jsou opravdu nyní vyměnit tak, aby jejich hodnoty nejsou 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