>> SPEAKER 1: Se pare ca putem schimba cu succes valorile în două
variabile prin trecerea lor într-un Funcția nu de valoare sau de către copii, dar
de referință sau prin adresele lor.
Cu alte cuvinte, avem nevoie pentru a pârghie ceva cunoscut ca un pointer.
Un pointer, într-adevăr, este doar Adresa de unele variabile.
Și așa, dacă ne-am asigura o funcție numită, să zicem, de swap cu adresa de
o variabilă și adresa unei alte variabilă, de swap ar trebui să fie împuternicită să
du-te la fiecare dintre aceste adrese și de fapt schimba
valori care sunt acolo.
>> Să vedem în acest context.
Să reimplementat schimb, după cum urmează.
În primul rând, hai să schimbăm o să nu fie un int dar să fie un pointer la un int sau
adresa un int.
Atunci să facem același lucru pentru b, schimbarea l de la un int să fie un pointer la un
int sau adresa un int.
>> Apoi, în interiorul de schimb, hai încă declara tmp astfel încât să avem o
loc temporar pentru o valoare a lui.
Dar o valoare lui nu este un sine, pentru că, din nou, o este acum adresa
unor Int.
Deci, dacă vrem să mergem la acea adresă și te int la acea adresa, avem
dereference acest indicator, de asemenea, cu titlu de operatorul de stele, scrie stele o.
>> Apoi, nu vreau să se schimbe valoarea unei.
Vreau pentru a modifica valoarea de la o, păstrând în minte, din nou,
care a este o adresă.
Deci, pentru a face acest lucru, am din nou nevoie de să spun stea o primeste.
Și acum vreau să pun în valoare asta e de la b, nu valoarea de b, care
De asemenea, este o adresă.
>> Deci, din nou spun, stele b.
Apoi, în ultima linie, am nevoie pentru a suprascrie ceea ce este la adresa b cu
ceea ce a fost la un e locația originală.
Pentru a face asta, eu stea b devine tmp.
>> Acum, la sfârșitul zilei, această Funcția este încă doar
trei linii de cod.
Dar, pentru că e valori manipularea prin intermediul adresei lor și nu
Valorile prime care au fost transmise în funcție, eu susțin că de swap este acum
competența de a modifica valorile care sunt trecute în prin adresele lor.
>> Dar am nevoie pentru a face o schimbare încă.
Eu nu mai pot trece în x și y înșiși.
Am nevoie pentru a trece la adresele de x și y.
Și pentru a face asta, am nevoie de puțin diferit notație sus.
Vreau să schimb x și y prin trecerea în adresa x, indicat de
ampersand x, și adresa y, indicat prin ampersand y.
>> În mod similar, până sus acum am nevoie pentru a schimba prototip funcția de a
potrivi cu schimbarea pe care le-am făcut, astfel încât o este, din nou, un pointer la un int.
b este, din nou, un pointer la un int.
Și acum eu pot salva fișierul meu.
Și să recompilați și rulați-l.
>> Face punct de swap slash de swap.
Și de această dată, x și y sunt într-adevăr acum schimbat astfel încât valorile lor nu sunt
1 și 2, dar 2 și 1.