>> DAVID J. MALAN: Vamos escrever um programa em que tentamos trocar os valores de
duas variáveis, x e y.
De antemão, eu escrevi muito deste programa já.
Primeiro, eu declarar uma variável, x, e armazenar nele o valor, 1.
Então eu declarar variável y e armazenar nele o valor, 2.
>> Então eu continuar com printf para exibir os valores dessas duas variáveis.
Então eu afirmo com outro printf para ser trocar essas variáveis.
Então eu chamo uma função chamada swap.
E então eu afirmo que as variáveis foram trocados.
E então eu imprimir que o que eu reivindico são os novos valores de x e y.
>> Agora o que é essa troca de função?
Não é algo que vem com o C. De fato, se olharmos para o topo da minha
arquivo, você verá que eu tenho declarado um protótipo para esta troca de função
especificando que leva dois inteiros, arbitrariamente denominada a e b, e esta
função não retorna nada.
Assim, presumivelmente, ele faz o que diz em swaps de um e os valores de b.
Vamos agora implementar swap.
>> Em primeiro lugar, eu vou declarar uma temporária variável e atribuir-lhe
o valor de um, embora eu pudesse tão facilmente armazenada nele b.
Eu estou indo em seguida para alterar o valor de um seja igual ao que em b.
E então, finalmente, eu vou mudar o valor de b para ser o que era, mas é uma
agora na temperatura.
>> Agora eu afirmo o que eu acabei de fazer é logicamente correta.
Eu tenho guardado um em uma variável temporária, mudou o valor de um ser de b, e, em seguida,
mudou o valor de b de ser o de uma era.
Mas quando eu compilar e executar esse programa, eu me preocupo que não é
vai o que eu vejo.
>> Faça, sem swap.
dot slash, sem swap.
E, infelizmente, de acordo com printf, o valor de x e y, inclusive
depois que afirmam estar trocando los, é ainda 1 e 2.
>> Agora, por que é isso?
Bem, acontece que no principal, quando chamar essa troca de função, passando em
x e y como argumentos, é realmente cópias de x e y que
são passados ​​para swap.
Nomeadamente, os valores 1 e 2 são passou para troca como a e b.
E é A e B que estamos, em última análise trocando em principal.
>> Isto é, torna-se 1 2, 2 torna-se 1.
Mas por causa de swap não tem valor de retorno e porque ele recebeu cópias de x
e y, é comportamento tem nenhum efeito em x e y.
De fato, a e b são escopo, por assim dizer, para trocar, enquanto x e y permanecer
como escopo principal.
>> Então, nós temos um problema.
Mas como corrigi-lo?