• Martes 7 de Mayo de 2024, 20:22

Autor Tema:  Re: SENCILLO (paso por referencia)  (Leído 1573 veces)

cyber

  • Miembro activo
  • **
  • Mensajes: 31
    • Ver Perfil
Re: SENCILLO (paso por referencia)
« en: Domingo 18 de Mayo de 2003, 06:28 »
0
Hola:
Por favor. ¿Alguien me puede ayudar?
Por lo sencilla que esta la pregunta veran que soy novato.

Voy...
Tengo una variable declarada en una funcion, se la paso a otra funcion para que me la modifique con un valor que necesito en la funcion donde declaro la variable.
Al volver a la funcion donde declaré la variable (no la retorno porque es un puntero a una struct) quiero que me aparezca con la direccion de memoria donde esta el valor modificado.

Parece que tengo que pasar parametros por referencia pero no se como es ¿?

Me explico?

PD: He estudiado como se hace pero no me da, puede ser que no sea eso lo que tengo que hacer pero a mi solo se me ocurre que es pasando la dirección de la variable por referencia

Saludos cyber :question:

Iluvatarm

  • Miembro activo
  • **
  • Mensajes: 38
    • Ver Perfil
Re: SENCILLO (paso por referencia)
« Respuesta #1 en: Lunes 19 de Mayo de 2003, 14:49 »
0
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

Iluvatarm

  • Miembro activo
  • **
  • Mensajes: 38
    • Ver Perfil
Re: SENCILLO (paso por referencia)
« Respuesta #2 en: Lunes 19 de Mayo de 2003, 14:58 »
0
Buenas de nuevo.

El ejemplo anterior es para tipos de variables simples. Si lo que deseas pasar es un puntero a un struct, su declaración es igual, pero su uso no:

MiFuncion2(miStruct *pRef) //pRef apunta a una variable del tipo miStruct
{
//El acceso a los campos del struct:
pRef->campo1=10;
pRef->campo2="prueba";
}

//En el prog pral.:
miStruct miPrueba;

miPrueba.campo1=11;//Accedemos a los campos de la estructura
miPrueba.campo2="";

MiFuncion2(&miPrueba);

//Ahora miPrueba tendra valor 10 y "Prueba" en sus campos


Recuerda: para acceder a los campos de una estructura es: variable.campo si la variable es del tipo estructura... si es un puntero a la estructura es: variablePuntero->campo

Espero que te haya aclarado algo

Suerte

cyber

  • Miembro activo
  • **
  • Mensajes: 31
    • Ver Perfil
Re: SENCILLO (paso por referencia)
« Respuesta #3 en: Jueves 22 de Mayo de 2003, 00:29 »
0
Buenas:
Me sirvió mucho tu ayuda lluvatarm, gracias a tus ejemplos pude comprender como podia pasar por referencia una variable y las diferencias entre pasarla por valos y pasarla por referencia. Muchas Gracias de nuevo y hasta la proxima...

cyber :suerte:

Iluvatarm

  • Miembro activo
  • **
  • Mensajes: 38
    • Ver Perfil
SENCILLO (paso por referencia)
« Respuesta #4 en: Jueves 22 de Mayo de 2003, 12:33 »
0
De nada.... "pa eso estamos"
:good: