Só complementando o comentário do colega...
Passagem por Referência
Sempre que possível é recomendável utilizar a forma de passagem por valor, para evitar "efeitos colaterais", mas há situações onde esses efeitos são desejáveis, por exemplo, quando desejamos criar uma função que retorne mais de um valor. As funções que vimos até agora, seno, cosseno, potencia, fatorial, etc, só devolvem um valor, mas que outras funções, que trabalhem com números imaginários por exemplo, precisam retornar 2 valores. Por exemplo, tente escrever uma função que retorne o quadrado de um número imaginário.
Poderíamos fazer uma função para retornar apenas a parte real, e outra para retornar apenas a parte imaginária. Mas o C permite criar uma função que retorne os dois valores simultaneamente. Observe a seguinte função:
void complexo2 (float *r, float *t){ float real; real = (*r * *r) - (*t * *t); *t = 2 * *r * *t; *r = real;}
Funções do tipo void como definidas acima correspondem a funções que não retornam um valor. No entanto, o símbolo '*' na definição dos parâmetros real e imaginário da função complexo2 indicam que esses parâmetros PODEM ser modificados dentro da função, ou seja, alterações que esses parâmetros sofrerem serão sentidas FORA da função, que correspondem aos efeitos colaterais que NÃOO OCORREM quando os parâmetros são passados por valor (sem o uso do caractere '*').
Fonte: http://www.ime.usp.br/~elo/IntroducaoComputacao/Funcoes%20passagem%20de%20parametros.htm
O caractere "*" é definido na linguagem C como sendo ponteiro. Ele é responsável pela passagem por referência, ou seja, irá apontar para o endereço de memória que a variável encontra-se. Qualquer alteração surtirá efeito diretamente neste endereço.