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?