1 00:00:00,000 --> 00:00:03,080 >> SPEAKER 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 A показалка, наистина, е само адрес на някаква променлива. 6 00:00:15,580 --> 00:00:19,660 И така, ако ние осигуряваме функция, наречена, например, размяна с адреса на 7 00:00:19,660 --> 00:00:23,550 променлива и адреса на друга променлива, суап следва да бъде оправомощена да 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 Нека reimplement суап, както следва. 12 00:00:31,360 --> 00:00:35,810 Първо, нека да се промени да не бъде Int но за да бъде указател към Int или 13 00:00:35,810 --> 00:00:36,920 адрес на вътр. 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 >> Тогава вътре в суап, нека още Декларирам, 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 на някои вътр. 20 00:00:53,270 --> 00:00:57,320 Така че, ако искаме да отидем на този адрес и получите Int на този адрес, ние имаме 21 00:00:57,320 --> 00:01:03,020 сочен този указател, също под формата на оператора на звезда, писане звезда. 22 00:01:03,020 --> 00:01:05,470 >> На следващо място, аз не искам да се промени стойността на. 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 И сега искам да се сложи в стойността че е в б, не стойността на б, който 27 00:01:18,360 --> 00:01:19,720 също е адрес. 28 00:01:19,720 --> 00:01:22,280 >> Така че, отново казвам, звезда б. 29 00:01:22,280 --> 00:01:26,690 След това в последния ми ред, трябва да замените това, което е на адрес б с 30 00:01:26,690 --> 00:01:28,970 какъв е бил първоначално местоположение на А. 31 00:01:28,970 --> 00:01:32,910 За да направите това, което правя звезда б получава ПТУ. 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 суровини и ценности, които бяха приети в функция, аз твърдя, че суап сега е 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 Вече не може да премине в х и у себе си. 39 00:01:52,190 --> 00:01:55,030 Трябва да мине в адресите на х и у. 40 00:01:55,030 --> 00:01:58,160 И за да направим това, имам нужда от малко различен нотация до върха. 41 00:01:58,160 --> 00:02:02,510 Искам да сменяте X и Y, като преминават през адреса на х, посочен от 42 00:02:02,510 --> 00:02:07,190 амперсанд X, както и адреса на Y, посочено от амперсанд у. 43 00:02:07,190 --> 00:02:10,570 >> По същия начин, до върха сега ми е необходимо, за да промените прототип на функцията на 44 00:02:10,570 --> 00:02:14,980 съвпада с промяната, която съм направил, така че а отново е указател към вътр. 45 00:02:14,980 --> 00:02:17,190 б отново е указател към вътр. 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 >> Направете суап точка наклонена черта суап. 49 00:02:25,330 --> 00:02:29,660 И този път, X и Y са наистина сега разменят така, че техните стойности не са 50 00:02:29,660 --> 00:02:31,950 1 и 2, но 2 и 1. 51 00:02:31,950 --> 00:02:34,900