Passagem por valor e referências
No C, por padrão, tudo é passado por valor, ou seja, as variáveis que são passadas como argumento não alteram o valor fora do escopo da função, isso é feito a por meio da criação de uma cópia do valor do parâmetro na função e realiza as alterações nela, isso garante que o valor original não seja modificado.
void trocar(int a, int b) {
int temp;
temp = a;
a = b;
b = temp;
}
int main(void) {
int x = 1, y = 2;
printf("Antes: x = %d e y = %d\n", x, y);
trocar(x, y);
printf("Depois: x = %d e y = %d\n", x, y)
}
Antes: x = 1 e y = 2
Depois: x = 1 e y = 2
A passagem por referência no C utiliza os ponteiros (não efetivamente a referência direta do parâmetro) no parâmetro das funções.
#include <stdio.h>
void trocar(int *a, int *b) {
int temp;
temp = *a;
*a = *b;
*b = temp;
}
int main(vdawoid) {
int x = 1, y = 2;
printf("Antes: x = %d e y = %d\n", x, y);
trocar(&x, &y);
printf("Depois: x = %d e y = %d\n", x, y);
return 0;
}
Antes: x = 1 e y = 2
Depois: x = 2 e y = 1