Este sitio web usa cookies de terceros para analizar el tráfico y personalizar los anuncios. Si no está de acuerdo, abandone el sitio y no siga navegando por él. ×


9.5. Punteros y funciones: parámetros por referencia

Hasta ahora no sabíamos cómo modificar los parámetros que pasábamos a una función. Recordemos el ejemplo 64:

/*---------------------------*/
/*  Ejemplo en C nº 64:      */
/*  C064.C                   */
/*                           */
/*  Dos variables locales    */
/*  con el mismo nombre      */
/*                           */
/*  Curso de C,              */
/*    Nacho Cabanes          */
/*---------------------------*/

#include 

void duplica(int n) {
    n = n * 2;
}

int main() {
    int n = 5;
    printf("n vale %d\n", n);
    duplica(n);
    printf("Ahora n vale %d\n", n);
   
    return 0;
}

Cuando poníamos este programa en marcha, el valor de n que se mostraba era un 5, porque los cambios que hiciéramos dentro de la función se perdían al salir de ella. Esta forma de trabajar (la única que conocíamos hasta ahora) es lo que se llama “pasar parámetros por valor”.

Pero existe una alternativa. Es lo que llamaremos “pasar parámetros por referencia”. Consiste en que el parámetro que nosotros pasamos a la función no es realmente la variable, sino la dirección de memoria en que se encuentra dicha variable (usando &). Dentro de la función, modificaremos la información que se encuentra dentro de esa dirección de memoria (usando *), así:

/*---------------------------*/
/*  Ejemplo en C nº 74:      */
/*  C074.C                   */
/*                           */
/*  Modificar el valor de    */
/*  un parámetro             */
/*                           */
/*  Curso de C,              */
/*    Nacho Cabanes          */
/*---------------------------*/

#include 

void duplica(int *x) {
    *x = *x * 2;
}

int main() {
    int n = 5;
    printf("n vale %d\n", n);
    duplica(&n);
    printf("Ahora n vale %d\n", n);

    return 0;   
}

Esto permite que podamos obtener más de un valor a partir de una función. Por ejemplo, podemos crear una función que intercambie los valores de dos variables enteras así:

/*---------------------------*/
/*  Ejemplo en C nº 75:      */
/*  C075.C                   */
/*                           */
/*  Intercambiar el valor de */
/*  dos parámetros           */
/*                           */
/*  Curso de C,              */
/*    Nacho Cabanes          */
/*---------------------------*/

#include 

void intercambia(int *x, int *y) {
    int auxiliar;
    auxiliar = *x;
    *x = *y;
    *y = auxiliar ;
}

int main() {
    int a = 5;
    int b = 12;
    intercambia(&a, &b);
    printf("Ahora a es %d y b es %d\n", a, b);
   
    return 0;
}

Este programa escribirá en pantalla que a vale 12 y que b vale 5. Dentro de la función “intercambia”, nos ayudamos de una variable auxiliar para memorizar el valor de x antes de cambiarlo por el valor de y.

Ejercicio propuesto: crear una función que calcule las dos soluciones de una ecuación de segundo grado (Ax2 + Bx + C = 0) y devuelva las dos soluciones como parámetros.