1 00:00:00,000 --> 00:00:03,080 >> LUIDSPREKER 1: Het blijkt dat we kunnen de waarden succes ruilen tegen twee 2 00:00:03,080 --> 00:00:07,670 variabelen door ze in een functioneren niet via waarde of via kopiƫren, maar 3 00:00:07,670 --> 00:00:10,390 hand of adressen. 4 00:00:10,390 --> 00:00:12,740 Met andere woorden, we moeten benutten iets bekend als een aanwijzer. 5 00:00:12,740 --> 00:00:15,580 Een wijzer, echt, is gewoon de adres van enkele variabele. 6 00:00:15,580 --> 00:00:19,660 En dus als we bieden een functie genaamd, zeg, ruilen met het adres van 7 00:00:19,660 --> 00:00:23,550 een variabele en het adres van een andere variabele, moet swap worden gemachtigd om 8 00:00:23,550 --> 00:00:26,090 naar elk van deze adressen en eigenlijk veranderen de 9 00:00:26,090 --> 00:00:27,360 waarden zijn. 10 00:00:27,360 --> 00:00:28,890 >> Laten we zien dit in context. 11 00:00:28,890 --> 00:00:31,360 Laten we herimplementeren swap als volgt. 12 00:00:31,360 --> 00:00:35,810 Laten we eerst eens veranderen een een int niet te zijn maar met een pointer naar een int of zijn de 13 00:00:35,810 --> 00:00:36,920 adres van een int. 14 00:00:36,920 --> 00:00:40,820 Laten we dan hetzelfde doen voor b, het veranderen het van een int een pointer naar een te 15 00:00:40,820 --> 00:00:42,780 int of het adres van een int. 16 00:00:42,780 --> 00:00:45,860 >> Dan binnenkant van swap, laten we nog verklaren tmp zodat we een 17 00:00:45,860 --> 00:00:47,810 tijdelijke plek voor een waardeketen. 18 00:00:47,810 --> 00:00:52,430 Maar de waarde niet een zelf, omdat Weer een nu dit adres 19 00:00:52,430 --> 00:00:53,270 sommige int. 20 00:00:53,270 --> 00:00:57,320 Dus als we willen gaan naar dat adres en krijgen int op dat adres, wij hebben 21 00:00:57,320 --> 00:01:03,020 dereferentie deze pointer, ook door middel van de ster operator, het schrijven van een ster. 22 00:01:03,020 --> 00:01:05,470 >> Vervolgens wil ik niet veranderen de waarde van een. 23 00:01:05,470 --> 00:01:08,770 Ik wil de waarde moment veranderen een, rekening houdend met, opnieuw, 24 00:01:08,770 --> 00:01:10,350 dat is een adres. 25 00:01:10,350 --> 00:01:14,050 Dus om dat te doen, ik weer nodig Zeg ster een krijgt. 26 00:01:14,050 --> 00:01:18,360 En nu wil ik in de waarde te zetten dat bij b, niet de waarde van b, waarvan 27 00:01:18,360 --> 00:01:19,720 Ook is een adres. 28 00:01:19,720 --> 00:01:22,280 >> Dus ik zeg nogmaals, ster b. 29 00:01:22,280 --> 00:01:26,690 Dan in mijn laatste regel, ik moet overschrijven wat er op het adres b met 30 00:01:26,690 --> 00:01:28,970 wat er op een originele locatie. 31 00:01:28,970 --> 00:01:32,910 Om dat te doen, ik doe ster b krijgt tmp. 32 00:01:32,910 --> 00:01:34,820 >> Nu aan het eind van de dag, deze functie is nog net 33 00:01:34,820 --> 00:01:35,950 drie regels code. 34 00:01:35,950 --> 00:01:39,860 Maar omdat het manipuleren van waarden via hun adres en niet de 35 00:01:39,860 --> 00:01:43,700 onbewerkte waarden die werden doorgegeven aan de functie, ik beweer dat swap is nu 36 00:01:43,700 --> 00:01:47,670 bevoegd is om de waarden te wijzigen dat worden doorgegeven via hun adressen. 37 00:01:47,670 --> 00:01:49,510 >> Maar ik moet een keer overstappen nog steeds. 38 00:01:49,510 --> 00:01:52,190 Ik kan niet meer passeren x en y zelf. 39 00:01:52,190 --> 00:01:55,030 Ik moet pas in de adressen van x en y. 40 00:01:55,030 --> 00:01:58,160 En om dat te doen, moet ik een iets verschillende notatie boven. 41 00:01:58,160 --> 00:02:02,510 Ik wil x en y wisselen door passeren het adres x, aangegeven met 42 00:02:02,510 --> 00:02:07,190 ampersand x, en het adres van y, aangegeven door ampersand y. 43 00:02:07,190 --> 00:02:10,570 >> Evenzo up top nu moet ik prototype van de functie veranderen 44 00:02:10,570 --> 00:02:14,980 overeenkomen met de verandering die ik heb gemaakt, zodat a is, wederom, een pointer naar een int. 45 00:02:14,980 --> 00:02:17,190 b is, wederom, een pointer naar een int. 46 00:02:17,190 --> 00:02:18,770 En nu kan ik mijn bestand op te slaan. 47 00:02:18,770 --> 00:02:20,680 En laten we opnieuw compileren en draaien. 48 00:02:20,680 --> 00:02:25,330 >> Maak swap dot slash swap. 49 00:02:25,330 --> 00:02:29,660 En deze keer, x en y zijn nu inderdaad verwisseld dat hun waarden niet 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