1 00:00:00,000 --> 00:00:00,320 2 00:00:00,320 --> 00:00:02,700 >> DAVID J. Malan: Imos escribir un programa en que tentamos cambiar os valores de 3 00:00:02,700 --> 00:00:04,970 dúas variables, x e y. 4 00:00:04,970 --> 00:00:07,490 De antemán, escribín moi deste programa xa. 5 00:00:07,490 --> 00:00:11,130 En primeiro lugar, eu declarar unha variable, x, e almacenar nel o valor, 1. 6 00:00:11,130 --> 00:00:14,120 Entón eu declarar variable y e gardar nel o valor, 2. 7 00:00:14,120 --> 00:00:17,700 >> Así que continuar con printf para amosar os valores destas dúas variables. 8 00:00:17,700 --> 00:00:21,090 Entón eu afirmo con outro printf para ser trocar estas variables. 9 00:00:21,090 --> 00:00:23,690 Entón eu chamo unha función chamada intercambio. 10 00:00:23,690 --> 00:00:26,100 E entón eu afirmo que as variables foron trocados. 11 00:00:26,100 --> 00:00:30,610 E entón eu imprimir que o que eu reivindico son os novos valores de x e y. 12 00:00:30,610 --> 00:00:32,030 >> Agora o que é esa cambio de función? 13 00:00:32,030 --> 00:00:34,970 Non é algo que vén co C. De feito, se miramos para arriba da miña 14 00:00:34,970 --> 00:00:38,850 ficheiro, verá que teño declarado un prototipo para este troco de función 15 00:00:38,850 --> 00:00:42,750 especificando que leva dous enteiros, arbitrariamente denominada a e b, e esta 16 00:00:42,750 --> 00:00:44,300 función non retorna nada. 17 00:00:44,300 --> 00:00:48,370 Así, presuntamente, fai o que di en swaps de un e os valores de b. 18 00:00:48,370 --> 00:00:50,170 Imos agora aplicar intercambio. 19 00:00:50,170 --> 00:00:53,820 >> En primeiro lugar, eu vou declarar unha temporal variable e asignar-lle 20 00:00:53,820 --> 00:00:57,260 o valor dun, aínda que eu puidese tan facilmente almacenada nel b. 21 00:00:57,260 --> 00:01:00,925 Eu estou indo axiña para cambiar o valor dun sexa igual ao que en b. 22 00:01:00,925 --> 00:01:04,849 E entón, finalmente, eu vou cambiar o valor de b para ser o que era, pero é unha 23 00:01:04,849 --> 00:01:06,340 agora na temperatura. 24 00:01:06,340 --> 00:01:08,910 >> Agora eu afirmo que eu acabo de facer é loxicamente correcta. 25 00:01:08,910 --> 00:01:12,780 Teño gardado un nunha variable temporal, cambiou o valor dun ser de b, e, a continuación, 26 00:01:12,780 --> 00:01:15,580 cambiou o valor de b de ser o dunha era. 27 00:01:15,580 --> 00:01:18,620 Pero cando eu compilar e executar este programa, eu me preocupo que non é 28 00:01:18,620 --> 00:01:20,140 vai o que eu vexo. 29 00:01:20,140 --> 00:01:21,625 >> Fai, sen intercambio. 30 00:01:21,625 --> 00:01:24,350 dot slash, sen intercambio. 31 00:01:24,350 --> 00:01:27,560 E, por desgraza, segundo printf, o valor de x e y, ata 32 00:01:27,560 --> 00:01:31,560 despois que afirman estar cambiando los, é aínda 1 e 2. 33 00:01:31,560 --> 00:01:32,630 >> Agora, por que é isto? 34 00:01:32,630 --> 00:01:36,160 Ben, acontece que no inicio, cando chamar esa cambio de función, pasando en 35 00:01:36,160 --> 00:01:39,960 x e y como argumentos, é realmente copias de x e y que 36 00:01:39,960 --> 00:01:41,310 son pasados ​​para intercambio. 37 00:01:41,310 --> 00:01:45,430 En particular, os valores 1 e 2 pasou para cambio como a e b. 38 00:01:45,430 --> 00:01:48,590 E é A e B que estamos, en definitiva cambiando en principal. 39 00:01:48,590 --> 00:01:50,810 >> É dicir, pasa a ser 1 2, 2 pasa a ser 1. 40 00:01:50,810 --> 00:01:54,630 Pero por mor de intercambio non ten valor de retorno e porque recibiu unha copia de x 41 00:01:54,630 --> 00:01:58,220 e y, é comportamento ningún efecto en xe y. 42 00:01:58,220 --> 00:02:02,610 De feito, a e b son alcance, por así dicir, para intercambiar, mentres x e y permanecer 43 00:02:02,610 --> 00:02:03,990 como ámbito principal. 44 00:02:03,990 --> 00:02:05,070 >> Entón, temos un problema. 45 00:02:05,070 --> 00:02:06,320 Pero como resolve-lo? 46 00:02:06,320 --> 00:02:08,312