1 00:00:00,000 --> 00:00:03,080 >> SPEAKER 1: Se pare ca putem schimba cu succes valorile în două 2 00:00:03,080 --> 00:00:07,670 variabile prin trecerea lor într-un Funcția nu de valoare sau de către copii, dar 3 00:00:07,670 --> 00:00:10,390 de referință sau prin adresele lor. 4 00:00:10,390 --> 00:00:12,740 Cu alte cuvinte, avem nevoie pentru a pârghie ceva cunoscut ca un pointer. 5 00:00:12,740 --> 00:00:15,580 Un pointer, într-adevăr, este doar Adresa de unele variabile. 6 00:00:15,580 --> 00:00:19,660 Și așa, dacă ne-am asigura o funcție numită, să zicem, de swap cu adresa de 7 00:00:19,660 --> 00:00:23,550 o variabilă și adresa unei alte variabilă, de swap ar trebui să fie împuternicită să 8 00:00:23,550 --> 00:00:26,090 du-te la fiecare dintre aceste adrese și de fapt schimba 9 00:00:26,090 --> 00:00:27,360 valori care sunt acolo. 10 00:00:27,360 --> 00:00:28,890 >> Să vedem în acest context. 11 00:00:28,890 --> 00:00:31,360 Să reimplementat schimb, după cum urmează. 12 00:00:31,360 --> 00:00:35,810 În primul rând, hai să schimbăm o să nu fie un int dar să fie un pointer la un int sau 13 00:00:35,810 --> 00:00:36,920 adresa un int. 14 00:00:36,920 --> 00:00:40,820 Atunci să facem același lucru pentru b, schimbarea l de la un int să fie un pointer la un 15 00:00:40,820 --> 00:00:42,780 int sau adresa un int. 16 00:00:42,780 --> 00:00:45,860 >> Apoi, în interiorul de schimb, hai încă declara tmp astfel încât să avem o 17 00:00:45,860 --> 00:00:47,810 loc temporar pentru o valoare a lui. 18 00:00:47,810 --> 00:00:52,430 Dar o valoare lui nu este un sine, pentru că, din nou, o este acum adresa 19 00:00:52,430 --> 00:00:53,270 unor Int. 20 00:00:53,270 --> 00:00:57,320 Deci, dacă vrem să mergem la acea adresă și te int la acea adresa, avem 21 00:00:57,320 --> 00:01:03,020 dereference acest indicator, de asemenea, cu titlu de operatorul de stele, scrie stele o. 22 00:01:03,020 --> 00:01:05,470 >> Apoi, nu vreau să se schimbe valoarea unei. 23 00:01:05,470 --> 00:01:08,770 Vreau pentru a modifica valoarea de la o, păstrând în minte, din nou, 24 00:01:08,770 --> 00:01:10,350 care a este o adresă. 25 00:01:10,350 --> 00:01:14,050 Deci, pentru a face acest lucru, am din nou nevoie de să spun stea o primeste. 26 00:01:14,050 --> 00:01:18,360 Și acum vreau să pun în valoare asta e de la b, nu valoarea de b, care 27 00:01:18,360 --> 00:01:19,720 De asemenea, este o adresă. 28 00:01:19,720 --> 00:01:22,280 >> Deci, din nou spun, stele b. 29 00:01:22,280 --> 00:01:26,690 Apoi, în ultima linie, am nevoie pentru a suprascrie ceea ce este la adresa b cu 30 00:01:26,690 --> 00:01:28,970 ceea ce a fost la un e locația originală. 31 00:01:28,970 --> 00:01:32,910 Pentru a face asta, eu stea b devine tmp. 32 00:01:32,910 --> 00:01:34,820 >> Acum, la sfârșitul zilei, această Funcția este încă doar 33 00:01:34,820 --> 00:01:35,950 trei linii de cod. 34 00:01:35,950 --> 00:01:39,860 Dar, pentru că e valori manipularea prin intermediul adresei lor și nu 35 00:01:39,860 --> 00:01:43,700 Valorile prime care au fost transmise în funcție, eu susțin că de swap este acum 36 00:01:43,700 --> 00:01:47,670 competența de a modifica valorile care sunt trecute în prin adresele lor. 37 00:01:47,670 --> 00:01:49,510 >> Dar am nevoie pentru a face o schimbare încă. 38 00:01:49,510 --> 00:01:52,190 Eu nu mai pot trece în x și y înșiși. 39 00:01:52,190 --> 00:01:55,030 Am nevoie pentru a trece la adresele de x și y. 40 00:01:55,030 --> 00:01:58,160 Și pentru a face asta, am nevoie de puțin diferit notație sus. 41 00:01:58,160 --> 00:02:02,510 Vreau să schimb x și y prin trecerea în adresa x, indicat de 42 00:02:02,510 --> 00:02:07,190 ampersand x, și adresa y, indicat prin ampersand y. 43 00:02:07,190 --> 00:02:10,570 >> În mod similar, până sus acum am nevoie pentru a schimba prototip funcția de a 44 00:02:10,570 --> 00:02:14,980 potrivi cu schimbarea pe care le-am făcut, astfel încât o este, din nou, un pointer la un int. 45 00:02:14,980 --> 00:02:17,190 b este, din nou, un pointer la un int. 46 00:02:17,190 --> 00:02:18,770 Și acum eu pot salva fișierul meu. 47 00:02:18,770 --> 00:02:20,680 Și să recompilați și rulați-l. 48 00:02:20,680 --> 00:02:25,330 >> Face punct de swap slash de swap. 49 00:02:25,330 --> 00:02:29,660 Și de această dată, x și y sunt într-adevăr acum schimbat astfel încât valorile lor nu sunt 50 00:02:29,660 --> 00:02:31,950 1 și 2, dar 2 și 1. 51 00:02:31,950 --> 00:02:34,900