• Sábado 22 de Enero de 2022, 09:36

Autor Tema:  Duda con argumento en una funcion  (Leído 1281 veces)

xuturk

  • Miembro activo
  • **
  • Mensajes: 50
    • Ver Perfil
Duda con argumento en una funcion
« en: Jueves 4 de Noviembre de 2010, 17:09 »
0
Hola de nuevo, pues llevo alguna que otra semana con esta duda, debido a que no tengo mucho tiempo libre, y veran, en un manual que tengo de C me aparece la siguiente funcion:

void funcion (struct argumento *&p)

mi duda surge, en el *& ya que se como se puede pasar un puntero por parametro, pero este tipo de puntero no se lo que es, y por tanto no se exactamente que estoy pasando por parametro, se que las referencias en C++ son &variable pero no se siquiera si se guardan en alguan posicion de la memoria como para querer adquirir mediante esta funcion la parte de la memoria de esa referencia, asi que agradeceria mucho que me explicaran este argumento.
Muchas gracias y un saludo :D

Epa

  • Miembro MUY activo
  • ***
  • Mensajes: 242
  • Nacionalidad: ar
    • Ver Perfil
Re: Duda con argumento en una funcion
« Respuesta #1 en: Viernes 5 de Noviembre de 2010, 06:36 »
0
Buenas.

En ese caso se esta pasando el puntero por referencia.
O sea que si modificas el puntero dentro de esa funcion el cambio se va a ver reflejado en la variable que le pasaste.

Te dejo un codigo para que lo pruebes, asi se entiende mejor.

Código: C++
  1.  
  2. #include <iostream>
  3.  
  4. using namespace std;
  5.  
  6. void funcion1(char* &car)
  7. {
  8.    car++;
  9. }
  10.  
  11. void funcion2(char* car)
  12. {
  13.    car++;
  14. }
  15.  
  16. int main()
  17. {
  18.    char cadena[] = "ab", *c;
  19.  
  20.    c = cadena; //c apunta a cadena[0] o sea *c == 'a';
  21.    cout << *c << endl;
  22.    funcion1(c);
  23.    cout << *c << endl;
  24.  
  25.    c = cadena; //c apunta a cadena[0] o sea *c == 'a';
  26.    cout << *c << endl;
  27.    funcion2(c);
  28.    cout << *c << endl;
  29.  
  30.    return 0;
  31. }
  32.  
  33.  

Saludos
The sweet smell of a great sorrow lies over the land.


xuturk

  • Miembro activo
  • **
  • Mensajes: 50
    • Ver Perfil
Re: Duda con argumento en una funcion
« Respuesta #2 en: Domingo 7 de Noviembre de 2010, 21:49 »
0
Hola, perdon por no haber podido responder antes, pero he estado ocupado estos dias, pues a ver, entender lo entiendo, por que se lo que es pasar punteros por referencia, pero no valdria directamente con poner la funcion como

funcion(char &car)

esque asi es como yo lo habia estudiado, y a simple vista es mas facil y el resultado aparentemente tambien es el mismo, es que lo que me lia del ejemplo es tener los dos signos juntos, osea cambiar parametros por referencia me acuerdo que era meter a la funcion directamente la direccion de memoria de la variable u objeto a modificar, y dentro al modificar los valores se cambiaban en la variable puesto que jugabas con esa parte de la memoria, entonces sigo perdido jejej tu ejemplo esta muy bien pero es eso lo que me lia, simplemente necesito saber entonces si simplemente lo que se quiere conseguir es meter la direccion de memoria o hacerlo de esa forma es para otro fin que yo no se y por eso se hace asi.
Muchas gracias y un saludo!

m0skit0

  • Miembro de PLATA
  • *****
  • Mensajes: 2337
  • Nacionalidad: ma
    • Ver Perfil
    • http://fr33kk0mpu73r.blogspot.com/
Re: Duda con argumento en una funcion
« Respuesta #3 en: Domingo 7 de Noviembre de 2010, 23:40 »
0
Si lo quieres pasar por referencia, tienes que declararlo así:

Código: C
  1. int tu_funcion (char* por_referencia);
  2.  
y pasarlo tal que

Código: C
  1. char por_referencia;
  2. tu_funcion(&por_referencia);
  3.  

Saludos

Epa

  • Miembro MUY activo
  • ***
  • Mensajes: 242
  • Nacionalidad: ar
    • Ver Perfil
Re: Duda con argumento en una funcion
« Respuesta #4 en: Lunes 8 de Noviembre de 2010, 03:21 »
0
Buenas.

Quizas el ejemplo del char no es el mejor.

La idea de eso es pasar un puntero por referencia.

Imaginate que tenes dos funciones como:
1- <tipo> funcion1(tipo_estructura &inst);
2- <tipo> funcion2(tipo_estructura* &inst);

en el primer caso, la variable inst va a ser de tipo tipo_estructura.
y a partir de esa variable vas a poder modificar los datos del objeto que pasaste como parametro. pero inst siempre va a apuntar a la misma direcciond ememoria.

en cambio con la segunda, la variable inst es un puntero a tipo tipo_estructura.
por lo que vas a poder modificar la direcion a donde apunta y los datos de esa direccion.

una utilidad de eso seria por ejemplo una funcion que pueda requerir realocar memoria.
el realloc, recibe como parametro el puntero original, pero segun la distribucion de memoria reservada en el heap puede que no devuelva el mismo puntero. entonces si no se le pasa el puntero no habria forma de ver reflejado ese cambio en la variable que se paso como argumento por lo que ser tendria una referencia invalidad y se perderian los datos.

espero que se entienda un poco mas la idea

saludos
The sweet smell of a great sorrow lies over the land.


xuturk

  • Miembro activo
  • **
  • Mensajes: 50
    • Ver Perfil
Re: Duda con argumento en una funcion
« Respuesta #5 en: Martes 16 de Noviembre de 2010, 21:20 »
0
Perdonarme de nuevo, tarde demasiado en contestar, es que paso poco tiempo por casa ultimamente y cuando lo hago tengo que estudiar jeje, me quedo mucho mas claro, muchas gracias ya lo entendi, por que entonces es equivalente a lo que dice moskito, solo que puedes pasarlo de una u otra forma, es cuestion de gustos y solo habia visto la suya jeje ahora sera la que use a pesar de que ya entiendo las dos.

Muchas gracias por las molestias a ambos un saludo :D