jueves, 20 de noviembre de 2014

Parámetros por valor y por referencia

Parámetros por referencia a funciones

En C todos los parámetros se pasan por valor. Esto tiene en principio dos inconvenientes:
•          No se pueden modificar variables pasadas como argumentos
•          Si se pasa como parámetro una estructura, se realiza un duplicado de ella, con lo que se pierde tiempo y memoria

Sin embargo, se puede pasar un puntero como argumento a una función. El puntero no se puede alterar, pero sí el valor al que apunta:

void incrementa_variable (int* var)
{
   (*var)++;
}

main()
{
   int x = 1;
   incrementa_variable (&x);       /* x pasa a valer 2 */
}


En el ejemplo anterior, habia que poner paréntesis en (*var)++ porque el operador ++ tiene más precedencia que la desreferencia (el asterisco). Entonces *var++ sería como escribir*(var++), que no sería lo que queremos.

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.

No hay comentarios.:

Publicar un comentario