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

Referências