1 00:00:00,000 --> 00:00:03,080 >> Spreker 1: Dit blyk uit wat ons kan die waardes suksesvol te ruil in twee 2 00:00:03,080 --> 00:00:07,670 veranderlikes deur verby hulle in 'n funksioneer nie deur waarde of deur kopieer nie, maar 3 00:00:07,670 --> 00:00:10,390 deur verwysing of deur hul adresse. 4 00:00:10,390 --> 00:00:12,740 Met ander woorde, ons moet benut iets wat bekend staan ​​as 'n wyser. 5 00:00:12,740 --> 00:00:15,580 'N wyser, regtig, is net die adres van sommige veranderlike. 6 00:00:15,580 --> 00:00:19,660 En so, as ons 'n funksie genoem, sê, ruil met die adres van 7 00:00:19,660 --> 00:00:23,550 'n veranderlike en die adres van 'n ander veranderlike, moet ruil bemagtig word om 8 00:00:23,550 --> 00:00:26,090 gaan na elk van die adresse en eintlik verander die 9 00:00:26,090 --> 00:00:27,360 waardes wat daar is. 10 00:00:27,360 --> 00:00:28,890 >> Kom ons sien dit in konteks. 11 00:00:28,890 --> 00:00:31,360 Kom ons reimplement ruil soos volg. 12 00:00:31,360 --> 00:00:35,810 Eerstens, laat ons verander om 'n nie 'n int te wees maar 'n verwysing na 'n int of om die 13 00:00:35,810 --> 00:00:36,920 adres van 'n int. 14 00:00:36,920 --> 00:00:40,820 Dan kom ons doen dieselfde vir B, veranderende dit van 'n int 'n verwysing na 'n te wees 15 00:00:40,820 --> 00:00:42,780 int of die adres van 'n int. 16 00:00:42,780 --> 00:00:45,860 >> Dan binnekant van ruil, laat ons nog steeds verklaar tmp sodat ons 'n 17 00:00:45,860 --> 00:00:47,810 tydelike plek vir 'n waarde. 18 00:00:47,810 --> 00:00:52,430 Maar 'n waarde is nie 'n self, want, weer, 'n is nou die adres 19 00:00:52,430 --> 00:00:53,270 van 'n paar int. 20 00:00:53,270 --> 00:00:57,320 So as ons wil om te gaan na die adres en kry int by daardie adres, ons het 21 00:00:57,320 --> 00:01:03,020 dereference hierdie pointer, ook by wyse van die ster-operateur, skryf 'n ster. 22 00:01:03,020 --> 00:01:05,470 >> Volgende, ek wil nie te verander die waarde van 'n. 23 00:01:05,470 --> 00:01:08,770 Ek wil die waarde te verander a, in gedagte te hou, weer, 24 00:01:08,770 --> 00:01:10,350 dat 'n is 'n adres. 25 00:01:10,350 --> 00:01:14,050 So om dit te doen, het ek weer nodig om te sê 'n ster kry. 26 00:01:14,050 --> 00:01:18,360 En nou wil ek om te sit in die waarde dit is by B, en nie die waarde van b, wat 27 00:01:18,360 --> 00:01:19,720 is ook 'n adres. 28 00:01:19,720 --> 00:01:22,280 >> So weer ek sê, ster b. 29 00:01:22,280 --> 00:01:26,690 Toe ek in my laaste lyn, ek nodig het om te oorskryf wat by adres b met 30 00:01:26,690 --> 00:01:28,970 wat op 'n oorspronklike plek. 31 00:01:28,970 --> 00:01:32,910 Om dit te doen, doen ek star b kry tmp. 32 00:01:32,910 --> 00:01:34,820 >> En aan die einde van die dag, van hierdie funksie is nog steeds net 33 00:01:34,820 --> 00:01:35,950 drie reëls van die kode. 34 00:01:35,950 --> 00:01:39,860 Maar, want dit is te manipuleer waardes deur middel van hul adres en nie die 35 00:01:39,860 --> 00:01:43,700 rou waardes wat in die geslaag is funksie, ek beweer dat ruil is nou 36 00:01:43,700 --> 00:01:47,670 bemagtig om die waardes te verander geslaag in via hul adresse. 37 00:01:47,670 --> 00:01:49,510 >> Maar ek moet een verandering aan nog steeds maak. 38 00:01:49,510 --> 00:01:52,190 Ek kan nie meer slaag in x en y hulself. 39 00:01:52,190 --> 00:01:55,030 Ek moet in die adresse te slaag van x en y. 40 00:01:55,030 --> 00:01:58,160 En om dit te doen, ek moet 'n paar effens verskillende notasie tot bo-op. 41 00:01:58,160 --> 00:02:02,510 Ek wil x en y te ruil deur verby in die adres van x, aangedui deur 42 00:02:02,510 --> 00:02:07,190 ampersand x, en die adres van y, aangedui deur ampersand y. 43 00:02:07,190 --> 00:02:10,570 >> Net so, tot bo-nou moet ek die funksie se prototipe verander 44 00:02:10,570 --> 00:02:14,980 ooreenstem met die verandering wat ek gemaak het, sodat 'n is, weer, 'n verwysing na 'n int. 45 00:02:14,980 --> 00:02:17,190 b is, weer, 'n verwysing na 'n int. 46 00:02:17,190 --> 00:02:18,770 En nou kan ek my lêer stoor. 47 00:02:18,770 --> 00:02:20,680 En laat ons hercompileren en voer dit uit. 48 00:02:20,680 --> 00:02:25,330 >> Maak ruil dot streep ruil. 49 00:02:25,330 --> 00:02:29,660 En hierdie keer, x en y is inderdaad nou verruil so dat hulle waardes is nie 50 00:02:29,660 --> 00:02:31,950 1 en 2, maar 2 en 1. 51 00:02:31,950 --> 00:02:34,900