1 00:00:00,000 --> 00:00:03,080 >> INTERLOCUTEUR 1: Il s'avère que nous pouvons échanger avec succès les valeurs en deux 2 00:00:03,080 --> 00:00:07,670 des variables en les passant dans un fonctionne pas par valeur ou par copie, mais 3 00:00:07,670 --> 00:00:10,390 par référence ou par leurs adresses. 4 00:00:10,390 --> 00:00:12,740 En d'autres termes, nous devons tirer parti quelque chose de connu comme un pointeur. 5 00:00:12,740 --> 00:00:15,580 Un pointeur, vraiment, n'est que le adresse d'une variable. 6 00:00:15,580 --> 00:00:19,660 Et si nous fournissons une fonction appelée, par exemple, échanger avec l'adresse de 7 00:00:19,660 --> 00:00:23,550 une variable et l'adresse de l'autre variable swap doit être habilitée à 8 00:00:23,550 --> 00:00:26,090 aller à chacune de ces adresses et fait changer la 9 00:00:26,090 --> 00:00:27,360 valeurs qui sont là. 10 00:00:27,360 --> 00:00:28,890 >> Voyons cela dans le contexte. 11 00:00:28,890 --> 00:00:31,360 Disons réimplémentons échange comme suit. 12 00:00:31,360 --> 00:00:35,810 Tout d'abord, nous allons changer un pas à être un int mais pour être un pointeur vers un int ou l' 13 00:00:35,810 --> 00:00:36,920 adresse d'un int. 14 00:00:36,920 --> 00:00:40,820 Ensuite, nous allons faire la même chose pour b, changer il d'un int pour être un pointeur vers un 15 00:00:40,820 --> 00:00:42,780 int ou l'adresse d'un int. 16 00:00:42,780 --> 00:00:45,860 >> Puis à l'intérieur de swap, nous allons encore déclarer tmp de sorte que nous avons une 17 00:00:45,860 --> 00:00:47,810 endroit temporaire pour une valeur de de. 18 00:00:47,810 --> 00:00:52,430 Mais d'une valeur n'est pas un lui-même, parce que, encore une fois, un est maintenant l'adresse 19 00:00:52,430 --> 00:00:53,270 de certains int. 20 00:00:53,270 --> 00:00:57,320 Donc, si nous voulons aller à cette adresse et obtenir int à cette adresse, nous avons 21 00:00:57,320 --> 00:01:03,020 déréférencer ce pointeur, également par voie de l'opérateur étoiles, écrit une étoile. 22 00:01:03,020 --> 00:01:05,470 >> Ensuite, je ne veux pas changer la valeur de a. 23 00:01:05,470 --> 00:01:08,770 Je veux changer la valeur à un, en gardant à l'esprit, encore une fois, 24 00:01:08,770 --> 00:01:10,350 que est une adresse. 25 00:01:10,350 --> 00:01:14,050 Donc, pour ce faire, je dois à nouveau à-dire une étoile devient. 26 00:01:14,050 --> 00:01:18,360 Et maintenant, je veux mettre en valeur c'est à b, pas la valeur de b, qui 27 00:01:18,360 --> 00:01:19,720 est également une adresse. 28 00:01:19,720 --> 00:01:22,280 >> Donc, je le répète, étoile b. 29 00:01:22,280 --> 00:01:26,690 Puis, dans ma dernière ligne, je dois écraser ce qui est à l'adresse b avec 30 00:01:26,690 --> 00:01:28,970 ce qui était à l'emplacement d'origine d'un. 31 00:01:28,970 --> 00:01:32,910 Pour ce faire, je le fais étoiles b obtient tmp. 32 00:01:32,910 --> 00:01:34,820 >> Or, à la fin de la journée, ce fonction est encore juste 33 00:01:34,820 --> 00:01:35,950 trois lignes de code. 34 00:01:35,950 --> 00:01:39,860 Mais parce que c'est la manipulation de valeurs par le biais de leur adresse et de ne pas le 35 00:01:39,860 --> 00:01:43,700 valeurs premières qui ont été adoptées dans le fonction, je prétends que swap est maintenant 36 00:01:43,700 --> 00:01:47,670 habilitée à modifier les valeurs que sont transmis via leurs adresses. 37 00:01:47,670 --> 00:01:49,510 >> Mais j'ai besoin de faire un changement encore. 38 00:01:49,510 --> 00:01:52,190 Je ne peux plus passer en x et y se. 39 00:01:52,190 --> 00:01:55,030 J'ai besoin de passer dans les adresses de x et y. 40 00:01:55,030 --> 00:01:58,160 Et pour ce faire, j'ai besoin d'un peu différents haut notation de haut. 41 00:01:58,160 --> 00:02:02,510 Je veux échanger x et y en passant l'adresse de x, indiquée par 42 00:02:02,510 --> 00:02:07,190 esperluette x, et l'adresse de y, indiqué par esperluette y. 43 00:02:07,190 --> 00:02:10,570 >> De même, là-haut maintenant que je dois modifier le prototype de la fonction de 44 00:02:10,570 --> 00:02:14,980 correspondre au changement que j'ai fait, de sorte que un est, encore une fois, un pointeur vers un int. 45 00:02:14,980 --> 00:02:17,190 b est, encore une fois, un pointeur vers un int. 46 00:02:17,190 --> 00:02:18,770 Et maintenant, je peux enregistrer mon fichier. 47 00:02:18,770 --> 00:02:20,680 Et nous allons recompiler et exécuter. 48 00:02:20,680 --> 00:02:25,330 >> Assurez-échange point barre swap. 49 00:02:25,330 --> 00:02:29,660 Et cette fois-ci, x et y sont maintenant bien permutés de telle sorte que leurs valeurs ne sont pas 50 00:02:29,660 --> 00:02:31,950 1 et 2, mais 2 et 1. 51 00:02:31,950 --> 00:02:34,900