1 00:00:00,000 --> 00:00:03,080 >> COLUNA 1: Acontece que pudermos trocar com sucesso os valores em dois 2 00:00:03,080 --> 00:00:07,670 variáveis, passando-os em um funcionar não por valor ou por cópia, mas 3 00:00:07,670 --> 00:00:10,390 por referência ou por seus endereços. 4 00:00:10,390 --> 00:00:12,740 Em outras palavras, precisamos alavancar algo conhecido como um ponteiro. 5 00:00:12,740 --> 00:00:15,580 Um ponteiro, na verdade, é apenas o endereço de alguma variável. 6 00:00:15,580 --> 00:00:19,660 E por isso, se nós fornecemos uma função chamada, digamos, trocar com o endereço do 7 00:00:19,660 --> 00:00:23,550 uma variável e o endereço de outra variável, troca deverá ter poderes para 8 00:00:23,550 --> 00:00:26,090 ir para cada um desses endereços e, na verdade, alterar o 9 00:00:26,090 --> 00:00:27,360 valores que estão lá. 10 00:00:27,360 --> 00:00:28,890 >> Vamos ver isso no contexto. 11 00:00:28,890 --> 00:00:31,360 Vamos reimplementar troca da seguinte forma. 12 00:00:31,360 --> 00:00:35,810 Primeiro, vamos mudar a não ser um int mas para ser um ponteiro para um int ou o 13 00:00:35,810 --> 00:00:36,920 endereço de um int. 14 00:00:36,920 --> 00:00:40,820 Então vamos fazer o mesmo para b, mudando lo de um int para ser um ponteiro para um 15 00:00:40,820 --> 00:00:42,780 int ou o endereço de um int. 16 00:00:42,780 --> 00:00:45,860 >> Então, dentro de swap, vamos ainda declarar tmp para que tenhamos uma 17 00:00:45,860 --> 00:00:47,810 lugar temporário para um valor de. 18 00:00:47,810 --> 00:00:52,430 Mas de um valor não é em si, porque, novamente, um é agora o endereço 19 00:00:52,430 --> 00:00:53,270 de alguns int. 20 00:00:53,270 --> 00:00:57,320 Portanto, se queremos ir para esse endereço e obter int nesse endereço, temos 21 00:00:57,320 --> 00:01:03,020 desreferenciava este ponteiro, também por meio de o operador estrela, escrevendo uma estrela. 22 00:01:03,020 --> 00:01:05,470 >> Em seguida, eu não quero mudar o valor de um. 23 00:01:05,470 --> 00:01:08,770 Eu quero mudar o valor em um, tendo em mente, de novo, 24 00:01:08,770 --> 00:01:10,350 que é um endereço. 25 00:01:10,350 --> 00:01:14,050 Então, para fazer isso, eu preciso de novo dizer uma estrela fica. 26 00:01:14,050 --> 00:01:18,360 E agora eu quero colocar no valor que está em b, e não o valor de b, que 27 00:01:18,360 --> 00:01:19,720 também é um endereço. 28 00:01:19,720 --> 00:01:22,280 >> Então mais uma vez eu digo, estrela b. 29 00:01:22,280 --> 00:01:26,690 Então, na minha última linha, eu preciso substituir o que está em endereço b com 30 00:01:26,690 --> 00:01:28,970 o que estava em de um local original. 31 00:01:28,970 --> 00:01:32,910 Para fazer isso, eu faço estrela b fica tmp. 32 00:01:32,910 --> 00:01:34,820 >> Agora, no final do dia, esta função ainda é apenas 33 00:01:34,820 --> 00:01:35,950 três linhas de código. 34 00:01:35,950 --> 00:01:39,860 Mas porque é manipular valores por meio de seu endereço e não o 35 00:01:39,860 --> 00:01:43,700 valores brutos que foram passados ​​para o função, eu afirmo que swap é agora 36 00:01:43,700 --> 00:01:47,670 poderes para alterar os valores que são passados ​​através de seus endereços. 37 00:01:47,670 --> 00:01:49,510 >> Mas eu preciso fazer uma mudança ainda. 38 00:01:49,510 --> 00:01:52,190 Eu não posso mais passar em x e y si. 39 00:01:52,190 --> 00:01:55,030 Eu preciso passar nos endereços de x e y. 40 00:01:55,030 --> 00:01:58,160 E para fazer isso, eu preciso de um pouco diferente top notação cima. 41 00:01:58,160 --> 00:02:02,510 Quero trocar x e y passando em o endereço de x, indicada pela 42 00:02:02,510 --> 00:02:07,190 ampersand x, eo endereço y, indicada por y comercial. 43 00:02:07,190 --> 00:02:10,570 >> Da mesma forma, em cima agora que eu preciso mudar protótipo da função para 44 00:02:10,570 --> 00:02:14,980 coincidir com a mudança que eu fiz, de modo que a é, de novo, um ponteiro para um int. 45 00:02:14,980 --> 00:02:17,190 b é, de novo, um ponteiro para um int. 46 00:02:17,190 --> 00:02:18,770 E agora eu posso salvar meu arquivo. 47 00:02:18,770 --> 00:02:20,680 E vamos recompilar e executá-lo. 48 00:02:20,680 --> 00:02:25,330 >> Faça troca barra troca de pontos. 49 00:02:25,330 --> 00:02:29,660 E este tempo, x e y são, de facto agora trocados de modo a que os seus valores não são 50 00:02:29,660 --> 00:02:31,950 1 e 2, mas 2 e 1. 51 00:02:31,950 --> 00:02:34,900