Quando passamos variáveis como argumentos para serem alteradas dentro de uma função 
                ou procedimento, e seus valores não serem descartados, passamos esses argumentos 
                por referência. Sendo assim, estamos passando uma referência de uma variável 
                para que o conteúdo da mesma possa ser alterado.
            
            
                A passagem por referência utiliza o operador (&) prefixado ao nome do parâmetro.
            
            Sintaxe
            
nome_procedimento(&arg1, &argN);
            Sintaxe
            
nome_funcao(&arg1, &argN);
            Onde
            &arg1..N: argumentos passados por referência
            
                Tanto a função quanto o procedimentos devem ter seus parâmetros declarados como 
                ponteiros para receber a referência de variáveis. Isso é feito utilizando o 
                operadore *.
            
            Sintaxe 3
            
void nome_procedimento(<tipo_dado> *nome_param1, <tipo_dado> *nome_paramN)
{
  //corpo procedimento
}
            Sintaxe 4
            
tipo_retorno nome_funcao(<tipo_dado> *nome_param1, <tipo_dado> *nome_paramN)
{
  //corpo da funcao
  retorn valor; 
}
            tipo_retorno: Tipo de dado retornado pela função
<tipo_dado>: Tipos de dado do parâmetro.
nome_param1..N: parâmetros separados por (,)
            Exemplo 2
            
#include <stdio.h>
void soma(int *a, int *b)
{
  *a = 100;
  *b = 200;
  printf("durante a:%d b:%d\n", *a,*b);
}
int main()
{
    int a=1,b=2;
    printf("antes a:%d b:%d\n", a,b);
    soma(&a,&b);
    printf("depois a:%d b:%d\n", a,b);
}
            Saída
            
antes a:1 b:2
durante a:100 b:200
depois a:100 b:200