Esta vez avanzaremos en lo relativo a las funciones en C, incorporando dos nuevos conceptos acerca del pasaje de parámetros: el pasaje por valor y por referencia.
Paso de parámetros por valor:
Éste es el pasaje que ya conocíamos desde el post referente a funciones. Si recordamos un poco al respecto, al realizar la definición de la función colocamos los parámetros que ésta recibe especificando el tipo de dato de los mismos.
Luego, cuando hacemos el llamado y especificamos los argumentos, estos se evalúan y se le pasa a la función una copia de los mismos. A esto es lo que llamamos paso por valor ya que la función trabajará con los valores de esas copias. Si pasáramos variables como argumento, éstas no se modificarían por este sistema de copias.
Veamos esto con un ejemplo simple en que tenemos la siguiente función void que intercambia los valores de dos enteros x e y:
Declaramos dos variables de tipo int en el main, mostramos sus valores, llamamos a la función y volvemos a mostrarlos de la siguiente manera:
Y veríamos en pantalla:
Donde vemos que, en efecto no se modificaron los valores. Pero agreguemos un printf al final de la función para ver si se habían modificado o no los valores:
Y obtenemos:
Donde vemos que, en efecto se modificaron los valores de x e y dentro de la función pero que no se modificaron las variables originales ya que al hacer el pasaje por valor se trabaja con la copia de las mismas.
Paso de parámetros por referencia:
En el pasaje por referencia se pasa a la función las direcciones de memoria de las variables en cuestión en lugar de su valor. A diferencia del paso por valor, aquí no se realizan copias de las variables sino que se trabaja sobre la dirección de memoria que pasamos, lo que nos permite modificar el valor de la variable en cuestión.
Veamos esto con el mismo ejemplo que usamos antes, pero usando punteros:
Luego hacemos el llamado a la función de la misma manera, pero pasando las direcciones de memoria de x e y:
Obteniendo lo siguiente al compilar el programa y ejecutarlo:
Donde vemos que esta vez sí se modificó el contenido de las variables en cuestión.
Espero que les sea útil la explicación y ya nos veremos en la próxima entrada donde seguiremos viendo más temas de C.
Paso de parámetros por valor:
Éste es el pasaje que ya conocíamos desde el post referente a funciones. Si recordamos un poco al respecto, al realizar la definición de la función colocamos los parámetros que ésta recibe especificando el tipo de dato de los mismos.
Luego, cuando hacemos el llamado y especificamos los argumentos, estos se evalúan y se le pasa a la función una copia de los mismos. A esto es lo que llamamos paso por valor ya que la función trabajará con los valores de esas copias. Si pasáramos variables como argumento, éstas no se modificarían por este sistema de copias.
Veamos esto con un ejemplo simple en que tenemos la siguiente función void que intercambia los valores de dos enteros x e y:
Declaramos dos variables de tipo int en el main, mostramos sus valores, llamamos a la función y volvemos a mostrarlos de la siguiente manera:
Y veríamos en pantalla:
Donde vemos que, en efecto no se modificaron los valores. Pero agreguemos un printf al final de la función para ver si se habían modificado o no los valores:
Y obtenemos:
Donde vemos que, en efecto se modificaron los valores de x e y dentro de la función pero que no se modificaron las variables originales ya que al hacer el pasaje por valor se trabaja con la copia de las mismas.
Paso de parámetros por referencia:
En el pasaje por referencia se pasa a la función las direcciones de memoria de las variables en cuestión en lugar de su valor. A diferencia del paso por valor, aquí no se realizan copias de las variables sino que se trabaja sobre la dirección de memoria que pasamos, lo que nos permite modificar el valor de la variable en cuestión.
Veamos esto con el mismo ejemplo que usamos antes, pero usando punteros:
Luego hacemos el llamado a la función de la misma manera, pero pasando las direcciones de memoria de x e y:
Obteniendo lo siguiente al compilar el programa y ejecutarlo:
Donde vemos que esta vez sí se modificó el contenido de las variables en cuestión.
Espero que les sea útil la explicación y ya nos veremos en la próxima entrada donde seguiremos viendo más temas de C.
La verdad muy claro, me sirvió mucho
ResponderEliminarGracias!
muy buena info.
ResponderEliminarGraciass!
nececito saber tambien lso pasos de parametro por Direccion PORFIIS
ResponderEliminarAsi cualquiera entiende, muy bueno
ResponderEliminargracias...
ResponderEliminarExcelente! Dudas aclaradas.
ResponderEliminarmuy bien
ResponderEliminarwow mas claro ni el agua gracias
ResponderEliminarpiponazo tu esplicacion tito esta de vuelo tuti
ResponderEliminarMuy bueno viejo!
ResponderEliminarMe ayudo mucho ;D !
ResponderEliminarPor cierto espero y me puedan ayudar con esto, eh visto en varias ocaciones lo siguiente:
void funcion(struct nodo &a){
//Código.
}
Lo eh visto en el tema de pilas, pero realmente lo que me saca de onda es '&a' como parámetro independientemente del tipo.
Si alguien puede explicarmelo sería de mucha ayuda.!
Muy claro tu explicación, gracias!!
ResponderEliminarGRACIAS HERMANO SE TE AGRADECE POR TU ESFUERZO QUE HACES EN EXPLICAR.........
ResponderEliminarExcelente explicación, enhorabuena.
ResponderEliminar