1 00:00:00,000 --> 00:00:03,080 >> SPEAKER 1: Si scopre che possiamo scambiare con successo i valori in due 2 00:00:03,080 --> 00:00:07,670 variabili di passarli in un funzionamento non per valore o per la copia, ma 3 00:00:07,670 --> 00:00:10,390 per riferimento o per i loro indirizzi. 4 00:00:10,390 --> 00:00:12,740 In altre parole, abbiamo bisogno di far leva qualcosa conosciuto come un puntatore. 5 00:00:12,740 --> 00:00:15,580 Un puntatore, in realtà, è solo l' l'indirizzo di una variabile. 6 00:00:15,580 --> 00:00:19,660 E così, se forniamo una funzione chiamata, per esempio, scambiare con l'indirizzo di 7 00:00:19,660 --> 00:00:23,550 una variabile e l'indirizzo di un'altra variabile, swap dovrebbe avere il potere di 8 00:00:23,550 --> 00:00:26,090 andare a ciascuna di tali indirizzi ed effettivamente cambiare la 9 00:00:26,090 --> 00:00:27,360 valori che ci sono. 10 00:00:27,360 --> 00:00:28,890 >> Vediamo questo nel contesto. 11 00:00:28,890 --> 00:00:31,360 Facciamo reimplementare di swap come segue. 12 00:00:31,360 --> 00:00:35,810 In primo luogo, cambiamo un non essere un int ma per essere un puntatore ad un int o l' 13 00:00:35,810 --> 00:00:36,920 indirizzo di un int. 14 00:00:36,920 --> 00:00:40,820 Allora facciamolo lo stesso per b, cambiando da un int sia un puntatore a un 15 00:00:40,820 --> 00:00:42,780 int o l'indirizzo di un int. 16 00:00:42,780 --> 00:00:45,860 >> Poi all'interno di swap, diamo ancora dichiarare tmp in modo che abbiamo un 17 00:00:45,860 --> 00:00:47,810 posto provvisorio per un valore di. 18 00:00:47,810 --> 00:00:52,430 Ma una di valore non è un sé, perché, di nuovo, una è ora l'indirizzo 19 00:00:52,430 --> 00:00:53,270 di qualche int. 20 00:00:53,270 --> 00:00:57,320 Quindi, se vogliamo andare a questo indirizzo e ottenere int a quell'indirizzo, abbiamo 21 00:00:57,320 --> 00:01:03,020 dereference questo puntatore, anche a titolo di l'operatore stella, scrivendo una stella. 22 00:01:03,020 --> 00:01:05,470 >> Poi, io non voglio cambiare il valore di a. 23 00:01:05,470 --> 00:01:08,770 Voglio cambiare il valore a, tenendo conto, di nuovo, 24 00:01:08,770 --> 00:01:10,350 che a è un indirizzo. 25 00:01:10,350 --> 00:01:14,050 Quindi, per farlo, ho di nuovo bisogno dire una stella ottiene. 26 00:01:14,050 --> 00:01:18,360 Ed ora voglio mettere in valore che è in B, non il valore di b, che 27 00:01:18,360 --> 00:01:19,720 è anche un indirizzo. 28 00:01:19,720 --> 00:01:22,280 >> Quindi, ripeto, stella b. 29 00:01:22,280 --> 00:01:26,690 Poi, nella mia ultima riga, ho bisogno di sovrascrivere ciò che è all'indirizzo b con 30 00:01:26,690 --> 00:01:28,970 quello che era a casa di una posizione originale. 31 00:01:28,970 --> 00:01:32,910 Per fare questo, faccio stella b ottiene tmp. 32 00:01:32,910 --> 00:01:34,820 >> Ora, alla fine della giornata, questa funzione è ancora solo 33 00:01:34,820 --> 00:01:35,950 tre righe di codice. 34 00:01:35,950 --> 00:01:39,860 Ma perché è la manipolazione di valori mediante il loro indirizzo e non sono 35 00:01:39,860 --> 00:01:43,700 valori grezzi che sono state approvate in funzione, io sostengo che la swap è ora 36 00:01:43,700 --> 00:01:47,670 il potere di cambiare i valori che sono passati in via loro indirizzi. 37 00:01:47,670 --> 00:01:49,510 >> Ma ho bisogno di fare ancora un cambio. 38 00:01:49,510 --> 00:01:52,190 Non posso più passare xey stessi. 39 00:01:52,190 --> 00:01:55,030 Ho bisogno di passare gli indirizzi di x ed y. 40 00:01:55,030 --> 00:01:58,160 E per farlo, ho bisogno di qualche po ' diversi top notazione up. 41 00:01:58,160 --> 00:02:02,510 Voglio scambiare x e y passando l'indirizzo di x, indicata con 42 00:02:02,510 --> 00:02:07,190 commerciale x, e l'indirizzo della y, indicato da commerciale a. 43 00:02:07,190 --> 00:02:10,570 >> Allo stesso modo, sulla parte superiore ora devo cambiare il prototipo della funzione di 44 00:02:10,570 --> 00:02:14,980 corrispondere il cambiamento che ho fatto, in modo che a è, ancora una volta, un puntatore ad un int. 45 00:02:14,980 --> 00:02:17,190 b è, ancora una volta, un puntatore ad un int. 46 00:02:17,190 --> 00:02:18,770 E ora posso salvare il mio file. 47 00:02:18,770 --> 00:02:20,680 E cerchiamo di ricompilare ed eseguirlo. 48 00:02:20,680 --> 00:02:25,330 >> Fai puntino di swap barra di swap. 49 00:02:25,330 --> 00:02:29,660 E questa volta, x ed y sono infatti ora scambiato in modo tale che i loro valori non sono 50 00:02:29,660 --> 00:02:31,950 1 e 2, ma 2 e 1. 51 00:02:31,950 --> 00:02:34,900