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?