Aula 20: Passagem por endereço — um swap que funciona
Lembra do swap quebrado da aula 10? A função recebia cópias de x e y, trocava as cópias — e os originais continuavam intocados. Hoje vamos consertar isso: void swap(int *a, int *b) recebe endereços, e chamamos com swap(&x, &y);. Escrever através de *a e *b altera as variáveis reais de quem chamou a
Pedir para um técnico consertar uma foto da sua sala não ajuda em nada: ele vai consertar a foto. O swap da aula 10 recebia 'fotos' (cópias). Quando você entrega o endereço e a chave (&x), ele entra e muda a sala de verdade.
- passagem por valor
- O padrão de C: a função recebe uma cópia. Alterar a cópia não afeta o original — por isso o swap da aula 10 falhou.
- passagem por endereço
- Passe &x em vez de x. A função escreve através do ponteiro e altera a variável real.
- parâmetro de saída
- Um ponteiro através do qual a função escreve um resultado — a forma de 'retornar' mais de um valor.
- ponteiro para struct
- Um ponteiro que guarda o endereço de uma struct: struct Student *s = &st;.
- o operador seta ->
- s->grade é um atalho para (*s).grade: vá até a struct no endereço e pegue o campo.