1 00:00:00,000 --> 00:00:00,320 2 00:00:00,320 --> 00:00:02,700 >> DAVID J. Malan: Écrivons un programme que nous essayons d'échanger les valeurs de 3 00:00:02,700 --> 00:00:04,970 deux variables x et y. 4 00:00:04,970 --> 00:00:07,490 À l'avance, j'ai écrit beaucoup de déjà ce programme. 5 00:00:07,490 --> 00:00:11,130 Tout d'abord, je déclare une variable, x, et stocker en elle la valeur 1. 6 00:00:11,130 --> 00:00:14,120 Ensuite, je déclare la variable y et stocker en elle la valeur, 2. 7 00:00:14,120 --> 00:00:17,700 >> Ensuite, je procède avec printf pour afficher les valeurs de ces deux variables. 8 00:00:17,700 --> 00:00:21,090 Puis-je demander à un autre printf à échanger ces variables. 9 00:00:21,090 --> 00:00:23,690 Puis j'appelle une fonction appelée swap. 10 00:00:23,690 --> 00:00:26,100 Et puis, je prétends que les variables ont été échangés. 11 00:00:26,100 --> 00:00:30,610 Et puis je imprimer que ce que je prétends sont les nouvelles valeurs de x et y. 12 00:00:30,610 --> 00:00:32,030 >> Maintenant, quelle est cette fonction d'échange? 13 00:00:32,030 --> 00:00:34,970 Ce n'est pas quelque chose qui vient avec C. En effet, si l'on regarde du haut de ma 14 00:00:34,970 --> 00:00:38,850 fichier, vous remarquerez que j'ai déclaré un prototype pour cette fonction échange 15 00:00:38,850 --> 00:00:42,750 spécifiant qu'il faut deux ints, arbitrairement appelés a et b, et ce 16 00:00:42,750 --> 00:00:44,300 fonction ne retourne rien. 17 00:00:44,300 --> 00:00:48,370 Donc, vraisemblablement, il fait ce qu'il dit swaps A et les valeurs de b. 18 00:00:48,370 --> 00:00:50,170 Implémentons maintenant swap. 19 00:00:50,170 --> 00:00:53,820 >> Tout d'abord, je vais déclarer un temporaire variable et lui assigner 20 00:00:53,820 --> 00:00:57,260 la valeur d'un, si je pouvais juste aussi facilement stocké dans ce b. 21 00:00:57,260 --> 00:01:00,925 Je puis aller à changer la valeur d'un être égale à celle de b. 22 00:01:00,925 --> 00:01:04,849 Et puis enfin, je vais changer l' valeur de b à être ce que un était mais est 23 00:01:04,849 --> 00:01:06,340 maintenant en température. 24 00:01:06,340 --> 00:01:08,910 >> Maintenant, je prétends que je viens de faire est logiquement correct. 25 00:01:08,910 --> 00:01:12,780 J'ai stocké un dans une variable temporaire, changé la valeur d'un être de b, puis 26 00:01:12,780 --> 00:01:15,580 changé la valeur de b à être ce que un de a. 27 00:01:15,580 --> 00:01:18,620 Mais quand je compiler et exécuter cette programme, je crains que ce n'est pas 28 00:01:18,620 --> 00:01:20,140 aller ce que je vois. 29 00:01:20,140 --> 00:01:21,625 >> Faire, pas de swap. 30 00:01:21,625 --> 00:01:24,350 point slash, pas de swap. 31 00:01:24,350 --> 00:01:27,560 Et malheureusement, selon printf, la valeur de x et y, même 32 00:01:27,560 --> 00:01:31,560 après que nous prétendons être échanger eux, est toujours 1 et 2. 33 00:01:31,560 --> 00:01:32,630 >> Maintenant, pourquoi est-ce? 34 00:01:32,630 --> 00:01:36,160 Eh bien, il s'avère que dans le principal, lorsque nous appeler cette fonction d'échange, en passant 35 00:01:36,160 --> 00:01:39,960 x et y comme arguments, il est fait copies de x et y qui 36 00:01:39,960 --> 00:01:41,310 sont passés en échange. 37 00:01:41,310 --> 00:01:45,430 A savoir, les valeurs 1 et 2 sont passé des contrats de swap que a et b. 38 00:01:45,430 --> 00:01:48,590 Et c'est a et b que nous sommes en fin de compte échange en principal. 39 00:01:48,590 --> 00:01:50,810 >> C'est, 1 devient 2, 2 devient 1. 40 00:01:50,810 --> 00:01:54,630 Mais parce échange n'a pas de valeur de retour et parce qu'il a reçu des copies de x 41 00:01:54,630 --> 00:01:58,220 et y, c'est le comportement a pas d'effet sur x et y. 42 00:01:58,220 --> 00:02:02,610 En effet, a et b ont une portée limitée, pour ainsi dire, d'échanger, alors que x et y restent 43 00:02:02,610 --> 00:02:03,990 scope pour principale. 44 00:02:03,990 --> 00:02:05,070 >> Donc, nous avons un problème. 45 00:02:05,070 --> 00:02:06,320 Mais comment y remédier? 46 00:02:06,320 --> 00:02:08,312