1 00:00:00,000 --> 00:00:00,320 2 00:00:00,320 --> 00:00:02,700 >> DAVID J. MALAN: Scriviamo un programma in che cerchiamo di scambiare i valori di 3 00:00:02,700 --> 00:00:04,970 due variabili, x ed y. 4 00:00:04,970 --> 00:00:07,490 In anticipo, ho scritto molto di questo programma già. 5 00:00:07,490 --> 00:00:11,130 In primo luogo, dichiaro una variabile, x, e memorizzare in essa il valore 1. 6 00:00:11,130 --> 00:00:14,120 Poi mi dichiaro variabile y e memorizzare in essa il valore 2. 7 00:00:14,120 --> 00:00:17,700 >> Poi procedo con printf per visualizzare i valori di queste due variabili. 8 00:00:17,700 --> 00:00:21,090 Allora io rivendico con un altro printf da scambiare tali variabili. 9 00:00:21,090 --> 00:00:23,690 Poi chiamo una funzione chiamata swap. 10 00:00:23,690 --> 00:00:26,100 E poi io sostengo che le variabili sono stati scambiati. 11 00:00:26,100 --> 00:00:30,610 E poi ho stampo che ciò che io sostengo sono i nuovi valori di x ed y. 12 00:00:30,610 --> 00:00:32,030 >> Ora che cosa è questa funzione swap? 13 00:00:32,030 --> 00:00:34,970 Non è qualcosa che viene con C. Infatti, se guardiamo alla parte superiore del mio 14 00:00:34,970 --> 00:00:38,850 il file, si noterà che ho dichiarato un prototipo di questa funzione swap 15 00:00:38,850 --> 00:00:42,750 specificando che prende due int, arbitrariamente chiamato A e B, e questo 16 00:00:42,750 --> 00:00:44,300 funzione non restituisce nulla. 17 00:00:44,300 --> 00:00:48,370 Quindi, presumibilmente, si fa quello che dice in swap A e valori di b. 18 00:00:48,370 --> 00:00:50,170 Vediamo ora implementare swap. 19 00:00:50,170 --> 00:00:53,820 >> In primo luogo, ho intenzione di dichiarare un temporaneo variabile e assegnare 20 00:00:53,820 --> 00:00:57,260 il valore di una, anche se solo potessi come facilmente memorizzati in esso b. 21 00:00:57,260 --> 00:01:00,925 Ho quindi intenzione di modificare il valore di un essere uguale a quella in b. 22 00:01:00,925 --> 00:01:04,849 E poi, infine, ho intenzione di cambiare l' valore di b ad essere quello che era, ma è un 23 00:01:04,849 --> 00:01:06,340 ora in temperatura. 24 00:01:06,340 --> 00:01:08,910 >> Ora io sostengo quello che ho appena fatto è logicamente corretto. 25 00:01:08,910 --> 00:01:12,780 Ho memorizzato un in una variabile temporanea, cambiato il valore di un essere b è, e quindi 26 00:01:12,780 --> 00:01:15,580 cambiato il valore di b ad essere quello di un era. 27 00:01:15,580 --> 00:01:18,620 Ma quando ho compilare ed eseguire l' programma, mi preoccupo che non è 28 00:01:18,620 --> 00:01:20,140 andando ciò che vedo. 29 00:01:20,140 --> 00:01:21,625 >> Fai, no swap. 30 00:01:21,625 --> 00:01:24,350 dot Slash, senza swap. 31 00:01:24,350 --> 00:01:27,560 E purtroppo, secondo printf, il valore di x ed y, anche 32 00:01:27,560 --> 00:01:31,560 dopo che pretendiamo di essere scambiando li, è ancora 1 e 2. 33 00:01:31,560 --> 00:01:32,630 >> Ora, perché? 34 00:01:32,630 --> 00:01:36,160 Beh, si scopre che in main, quando abbiamo chiamare questa funzione swap, passando 35 00:01:36,160 --> 00:01:39,960 x e y come argomenti, in realtà è copie di x e y che 36 00:01:39,960 --> 00:01:41,310 sono passati in swap. 37 00:01:41,310 --> 00:01:45,430 Vale a dire, i loro valori 1 e 2 sono passato in swap a e b. 38 00:01:45,430 --> 00:01:48,590 Ed è a e b che siamo alla fine scambio in principale. 39 00:01:48,590 --> 00:01:50,810 >> Cioè, 1 diventa 2, 2 diventa 1. 40 00:01:50,810 --> 00:01:54,630 Ma poiché di swap non ha alcun valore di ritorno e perché ha ricevuto copia di x 41 00:01:54,630 --> 00:01:58,220 e y, è comportamento è nessun effetto su x ed y. 42 00:01:58,220 --> 00:02:02,610 Infatti, a e b sono limitate, per così dire, per scambiare, mentre x e y rimangono 43 00:02:02,610 --> 00:02:03,990 ambito di principale. 44 00:02:03,990 --> 00:02:05,070 >> Quindi, abbiamo un problema. 45 00:02:05,070 --> 00:02:06,320 Ma come risolvere il problema? 46 00:02:06,320 --> 00:02:08,312