Buenas,
Por si no he entendido mal, tu problema es que tienes una variable declarada en un sitio donde llamas a una funcion la cual modifica ese valor... y te interesa mantenerlo
Si pasas la variable de manera normal, al ejecutar la función, se copia esa variable, y una vez acabada la funcion se elimina: Eso no nos interesa porque se perderian las modificaciones.
Lo que tienes que hacer es pasarle la direccion de memoria de la variable (como suponias), y modificar el contenido de la variable cuya direccion de memoria le pasas. Parece lioso en texto, pero lo verás más claro con un ejemplo:
//Funcion:
void MiFuncion(int porValor, int* porRef)
//int* significa q es la posicion de memoria de un entero (puntero a entero)
{
int aux;
aux=porValor;
porValor=*porRef; //porValor tomara el valor de lo apuntado por el puntero
*porRef=aux; //La variable apuntada porRef tomara el valor de aux;
}
//En la llamada a la funcion:
...
int numero1, numero2;
numero1=32;numero2=10;
MiFuncion(numero1,&numero2);//le pasamos el numero1 y la direccion de la variable numero2
//Ahora numero1 seguirá valiendo 32 (se ha modificado una copia de numero1 dentro de la funcion, pero se ha eliminado al salir)
//numero2 valdrá 32 pq se ha modificado su contenido
Espero que te haya servido de ayuda, aunque me parece que he sido un poco lioso. Reconozco que al principio, los punteros en C son un poco 'dificiles'
Suerte