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:
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