>> DAVID J. Malan: Écrivons un programme que nous essayons d'échanger les valeurs de
deux variables x et y.
À l'avance, j'ai écrit beaucoup de déjà ce programme.
Tout d'abord, je déclare une variable, x, et stocker en elle la valeur 1.
Ensuite, je déclare la variable y et stocker en elle la valeur, 2.
>> Ensuite, je procède avec printf pour afficher les valeurs de ces deux variables.
Puis-je demander à un autre printf à échanger ces variables.
Puis j'appelle une fonction appelée swap.
Et puis, je prétends que les variables ont été échangés.
Et puis je imprimer que ce que je prétends sont les nouvelles valeurs de x et y.
>> Maintenant, quelle est cette fonction d'échange?
Ce n'est pas quelque chose qui vient avec C. En effet, si l'on regarde du haut de ma
fichier, vous remarquerez que j'ai déclaré un prototype pour cette fonction échange
spécifiant qu'il faut deux ints, arbitrairement appelés a et b, et ce
fonction ne retourne rien.
Donc, vraisemblablement, il fait ce qu'il dit swaps A et les valeurs de b.
Implémentons maintenant swap.
>> Tout d'abord, je vais déclarer un temporaire variable et lui assigner
la valeur d'un, si je pouvais juste aussi facilement stocké dans ce b.
Je puis aller à changer la valeur d'un être égale à celle de b.
Et puis enfin, je vais changer l' valeur de b à être ce que un était mais est
maintenant en température.
>> Maintenant, je prétends que je viens de faire est logiquement correct.
J'ai stocké un dans une variable temporaire, changé la valeur d'un être de b, puis
changé la valeur de b à être ce que un de a.
Mais quand je compiler et exécuter cette programme, je crains que ce n'est pas
aller ce que je vois.
>> Faire, pas de swap.
point slash, pas de swap.
Et malheureusement, selon printf, la valeur de x et y, même
après que nous prétendons être échanger eux, est toujours 1 et 2.
>> Maintenant, pourquoi est-ce?
Eh bien, il s'avère que dans le principal, lorsque nous appeler cette fonction d'échange, en passant
x et y comme arguments, il est fait copies de x et y qui
sont passés en échange.
A savoir, les valeurs 1 et 2 sont passé des contrats de swap que a et b.
Et c'est a et b que nous sommes en fin de compte échange en principal.
>> C'est, 1 devient 2, 2 devient 1.
Mais parce échange n'a pas de valeur de retour et parce qu'il a reçu des copies de x
et y, c'est le comportement a pas d'effet sur x et y.
En effet, a et b ont une portée limitée, pour ainsi dire, d'échanger, alors que x et y restent
scope pour principale.
>> Donc, nous avons un problème.
Mais comment y remédier?