SoloCodigo
Programación General => C/C++ => Mensaje iniciado 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!
-
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.
-
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:
-
Lo que tambien funciona para modificar el puntero es pasar un puntero a una referencia:
void funcion(char *&p)
-
haidion: las refererencias, como dijo jordi97bcn solo existen en C++.
-
Gracias por aclararmelo
-
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.