El tipico ejemplo de paso de parametros por referencia en c suele ser un intercambio
entre enteros, al que se podria añadir un ejemplo con cadenas de
texto que ademas son punteros.
/**
* $Id$
* ejemplo de swap en c
* Pello Xabier Altadill Izura
*/

// Declaracion de funcion swap -paso de parametros por referencias-
void swap(int * a, int * b);
// swap de cadenas
void swap_cadenas(char ** a, char ** b);

int main (int argc, char *argv[], char *envp[]) {
    int a = 45, b = 89;
    char *cadena_a = "Joe que curioso";
    char *cadena_b = "Es que no podemos hacer mas";

    // swap de enteros
    printf("Valor de a: %d
Valor de b: %d
",a,b);
    swap(&a,&b);
    printf("Y ahora...
Valor de a: %d
Valor de b: %d
",a,b);

    // swap de cadenas con punteros
    printf("Valor de cadena_a: %s
Valor de cadena_b: %sn",cadena_a,cadena_b);
    swap_cadenas(&cadena_a,&cadena_b);
    printf("Y ahora...
Valor de cadena_a: %s
Valor de cadena_b: %s
",cadena_a,cadena_b);

    return 1;
}

// funcion swap de enteros
void swap(int * a, int * b) {
    int tmp;
    tmp = *a;
    *a = *b;
    *b = tmp;
}

// funcion swap de cadenas con punteros
void swap_cadenas(char ** a, char ** b) {
    char * tmp;
    tmp = *a;
    *a = *b;
    *b = tmp;
}