>> DAVID J. Malan: Imos escribir un programa en que tentamos cambiar os valores de
dúas variables, x e y.
De antemán, escribín moi deste programa xa.
En primeiro lugar, eu declarar unha variable, x, e almacenar nel o valor, 1.
Entón eu declarar variable y e gardar nel o valor, 2.
>> Así que continuar con printf para amosar os valores destas dúas variables.
Entón eu afirmo con outro printf para ser trocar estas variables.
Entón eu chamo unha función chamada intercambio.
E entón eu afirmo que as variables foron trocados.
E entón eu imprimir que o que eu reivindico son os novos valores de x e y.
>> Agora o que é esa cambio de función?
Non é algo que vén co C. De feito, se miramos para arriba da miña
ficheiro, verá que teño declarado un prototipo para este troco de función
especificando que leva dous enteiros, arbitrariamente denominada a e b, e esta
función non retorna nada.
Así, presuntamente, fai o que di en swaps de un e os valores de b.
Imos agora aplicar intercambio.
>> En primeiro lugar, eu vou declarar unha temporal variable e asignar-lle
o valor dun, aínda que eu puidese tan facilmente almacenada nel b.
Eu estou indo axiña para cambiar o valor dun sexa igual ao que en b.
E entón, finalmente, eu vou cambiar o valor de b para ser o que era, pero é unha
agora na temperatura.
>> Agora eu afirmo que eu acabo de facer é loxicamente correcta.
Teño gardado un nunha variable temporal, cambiou o valor dun ser de b, e, a continuación,
cambiou o valor de b de ser o dunha era.
Pero cando eu compilar e executar este programa, eu me preocupo que non é
vai o que eu vexo.
>> Fai, sen intercambio.
dot slash, sen intercambio.
E, por desgraza, segundo printf, o valor de x e y, ata
despois que afirman estar cambiando los, é aínda 1 e 2.
>> Agora, por que é isto?
Ben, acontece que no inicio, cando chamar esa cambio de función, pasando en
x e y como argumentos, é realmente copias de x e y que
son pasados ​​para intercambio.
En particular, os valores 1 e 2 pasou para cambio como a e b.
E é A e B que estamos, en definitiva cambiando en principal.
>> É dicir, pasa a ser 1 2, 2 pasa a ser 1.
Pero por mor de intercambio non ten valor de retorno e porque recibiu unha copia de x
e y, é comportamento ningún efecto en xe y.
De feito, a e b son alcance, por así dicir, para intercambiar, mentres x e y permanecer
como ámbito principal.
>> Entón, temos un problema.
Pero como resolve-lo?