AnteriorPosterior

7.7. Los conflictos de nombres en las variables

  Curso: Fundamentos de programación en C, por Nacho Cabanes

7.7. Los conflictos de nombres en las variables

¿Qué ocurre si damos el mismo nombre a dos variables locales? Vamos a comprobarlo con un ejemplo:

/*---------------------------*/
/*  Ejemplo en C nº 64:      */
/*  C064.C                   */
/*                           */
/*  Dos variables locales    */
/*  con el mismo nombre      */
/*                           */
/*  Curso de C,              */
/*    Nacho Cabanes          */
/*---------------------------*/
 
#include <stdio.h>
 
void duplica(int n) #123;
    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;
}
 

El resultado de este programa es:

n vale 5
Ahora n vale 5

¿Por qué? Sencillo: tenemos una variable local dentro de "duplica" y otra dentro de "main". El hecho de que las dos tengan el mismo nombre no afecta al funcionamiento del programa, siguen siendo distintas. El programa se comporta como si "duplica" fuera así:

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

es decir, como si ambas tuvieran nombres distintos.

¿Y qué ocurre si una de ellas es una variable global? Retoquemos el ejemplo:

/*---------------------------*/
/*  Ejemplo en C nº 65:      */
/*  C065.C                   */
/*                           */
/*  Variables locales y      */
/*  globales con el mismo    */
/*  nombre                   */
/*                           */
/*  Curso de C,              */
/*    Nacho Cabanes          */
/*---------------------------*/
 
#include <stdio.h>
 
int n = 5;
 
void duplica(int n) {
    n = n * 2;
}
 
int main() {
    printf("n vale %d\n",/span> n);
    duplica(n);
    printf("Ahora n vale %d\n", n);
 
    return 0;
}
 

El resultado será exactamente el mismo: la línea "void duplica(int n)" hace que dentro de "duplica", n se comporte como una variable local, por lo que los cambios que le hagamos no afectan a la variable global.

¿Y si queremos que se pueda modificar un dato indicado como parámetro? Todavía no sabemos como hacerlo (lo veremos en el próximo tema). Por ahora sólo sabemos hacerlo devolviendo el nuevo valor con "return", con lo que nuestro último ejemplo quedaría así:

/*---------------------------*/
/*  Ejemplo en C nº 66:      */
/*  C066.C                   */
/*                           */
/*  Modificar la variable    */
/*  indicada como parámetro: */
/*  devolviendo su valor     */
/*                           */
/*  Curso de C,              */
/*    Nacho Cabanes          */
/*---------------------------*/
 
#include <stdio.h>
 
int duplica(int n) {
    return n * 2;
}
 
int main() {
    int n = 5;
    printf("n vale %d\n", n);
    n = duplica(n);
    printf("Ahora n vale %d\n", n);
 
    return 0;
}
 

Actualizado el: 25-07-2014 17:11

AnteriorPosterior