Hola:
Cuando pasamos un puntero como parámetro de una función por valor pasa lo mismo que con cualquier otro objeto.
Dentro de la función trabajamos con una copia del parámetro, que en este caso es un puntero. Por lo tanto, igual que pasaba con el ejemplo anterior, las modificaciones en el valor del parámetro serán locales a la función y no se mantendrán después de retornar.
Sin embargo, no sucede lo mismo con el objeto apuntado por el puntero, puesto que en ambos casos será el mismo, ya que tanto el puntero como el parámetro tienen como valor la misma dirección de memoria. Por lo tanto, los cambios que hagamos en los objetos apuntados por el puntero se conservarán al abandonar la función.
Mas referencias y ejemplos en: http://c.conclase.net/curso/?cap=015b
En la preactica, el pasar valores por referencia, a mi entender es semejante al uso de variales globales o sea resumiendo quedarian dos formas de recuperar el valor en el main:
Cuando se hace la llamada a la funcion, alli esta tambien el resultado: modelo funcion que devuelve
int suma(int nume1, int nume2)
{return(nume1 +nume2);} /*los valores nume1 y nume2 son locales, no conservan su valor al salir de la funcion*/
en el main, se pone
ingrese nu1
................
ingrese nu2
................
mostrar resultado= suma(nu1,nu2);
si resultado es publico no hace falta que la funcion devuelva, lo mismo al operar sobre punteros
variable publica resultado (semejante a usar un puntero para guardar el resultado o sea por referencia)
void suma(int nume1, nume2)/*nume1 y nume2 pueden ser punteros (paso por reerencia)*/
{resultado=nume1+nume2;}/*nume1 y nume2 son locales, resultado es publica*/
/*para que resultado conserve su valor, tiene que se publica, sea puntero o valor*/
en el main
ingrese nu1 /*nu1 puede ser un puntero*/
ingrese nu2 /*nu2 puede ser un puntero*/
suma(nu1,nu2);
mostrar resultado;
Espero que aclare el tema
Dios te bendiga
Saludos
Antonio