SoloCodigo

Programación General => C/C++ => Mensaje iniciado por: jordi97bcn en Viernes 17 de Julio de 2009, 16:51

Título: paso de punteros a funciones
Publicado por: jordi97bcn en Viernes 17 de Julio de 2009, 16:51
Hola a todos, y antes de nada gracias por leer mi mensaje.

tengo una dudilla... Cuando pasas un puntero una función como parámetro, de esta manera:

char *p
......
.....
cambiar(p)
....

void cambiar (char *p)
{
....
}

internamente, en el método cambiar, se puede modificar el contenido de *p (es decir, el "valor" de la variable a la que apunta) pero NO la dirección a la que apunta p?

No sé si me explico, sé que suena un poco enrevesado. Reformulando la pregunta, ¿se puede cambiar desde dentro de un método, a dónde apunta un puntero, si ese puntero se recibe como parámetro? o solo se puede cambiar su "contenido"?

gracias de nuevo, y saludos!
Título: Re: paso de punteros a funciones
Publicado por: haidion en Viernes 17 de Julio de 2009, 17:09
Yo te diria que solo se puede cambiar el contenido por que en realidad estas pasando una copia del puntero a la funcion y no el puntero en si.
Título: Re: paso de punteros a funciones
Publicado por: jordi97bcn en Viernes 17 de Julio de 2009, 17:52
Es verdad, creo que acabo de comprobarlo... De lo que se deduce que en C, no existe el paso por referencia. Lo unico que se puede hacer para emular esto es usar punteros (cuando solo queremos cambiar el contenido) y dobles punteros (cuando queremos cambiar a dónde apunta el puntero)

uff me ha costado dios y ayuda entenderlo (aunque el codigo resultante parece chino, jejeje)

gracias y un saludo! :good:
Título: Re: paso de punteros a funciones
Publicado por: haidion en Viernes 17 de Julio de 2009, 18:38
Lo que tambien funciona para modificar el puntero es pasar un puntero a una referencia:

void funcion(char *&p)
Título: Re: paso de punteros a funciones
Publicado por: Eternal Idol en Viernes 17 de Julio de 2009, 23:21
haidion: las refererencias, como dijo jordi97bcn solo existen en C++.
Título: Re: paso de punteros a funciones
Publicado por: haidion en Lunes 20 de Julio de 2009, 14:51
Gracias por aclararmelo
Título: Re: paso de punteros a funciones
Publicado por: m0skit0 en Jueves 23 de Julio de 2009, 12:49
Cita de: "jordi97bcn"
De lo que se deduce que en C, no existe el paso por referencia.
:huh: Es que el paso por referencia es precisamente eso: pasar el puntero (una referencia), no el valor en sí. De ahí "por referencia" y "por valor". Este tipo de paso de parámetros creo recordar que lo introdujo el lenguaje Pascal, y C lo usó más tarde.