AnteriorPosterior

7.6. Variables locales y variables globales

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

7.6. Variables locales y variables globales

Hasta ahora, hemos declarado las variables antes de "main". Ahora nuestros programas tienen varios "bloques", así que se comportarán de forma distinta según donde declaremos las variables.

Las variables se pueden declarar dentro de un bloque (una función), y entonces sólo ese bloque las conocerá, no se podrán usar desde ningún otro bloque del programa. Es lo que llamaremos "variables locales".

Por el contrario, si declaramos una variable al comienzo del programa, fuera de todos los "bloques" de programa, será una "variable global", a la que se podrá acceder desde cualquier parte.

Vamos a verlo con un ejemplo. Crearemos una función que calcule la potencia de un número entero (un número elevado a otro), y el cuerpo del programa que la use.

La forma de conseguir elevar un número a otro será a base de multiplicaciones, es decir:

3 elevado a 5 = 3 · 3 · 3 · 3 · 3

(multiplicamos 5 veces el 3 por sí mismo). En general, como nos pueden pedir cosas como "6 elevado a 100" (o en general números que pueden ser grandes), usaremos la orden "for" para multiplicar tantas veces como haga falta:

/*---------------------------*/
/*  Ejemplo en C nº 63:      */
/*  C063.C                   */
/*                           */
/*  Ejemplo de función con   */
/*  variables locales        */
/*                           */
/*  Curso de C,              */
/*    Nacho Cabanes          */
/*---------------------------*/
 
#include <stdio.h>
 
int potencia(int base, int exponente) {
   int temporal = 1;        /* Valor que voy hallando */
   int i;                   /* Para bucles */
 
   for(i=1; i<=exponente; i++)    /* Multiplico "n" veces */
     temporal *= base;            /* Y calculo el valor temporal */
   return temporal;               /* Tras las multiplicaciones, */
 }                                /*    obtengo el valor que buscaba */
 
int main() {
    int num1, num2;
 
    printf("Introduzca la base: ");
    scanf("%d", &num1);
    printf("Introduzca el exponente: ");
    scanf("%d", &num2);
    printf("%d elevado a %d vale %d", num1, num2, potencia(num1,num2));
 
    return 0;
}
 

En este caso, las variables "temporal" e "i" son locales a la función "potencia": para "main" no existen. Si en "main" intentáramos hacer i=5; obtendríamos un mensaje de error.

De igual modo, "num1" y "num2" son locales para "main": desde la función "potencia" no podemos acceder a su valor (ni para leerlo ni para modificarlo), sólo desde "main".

En general, deberemos intentar que la mayor cantidad de variables posible sean locales (lo ideal sería que todas lo fueran). Así hacemos que cada parte del programa trabaje con sus propios datos, y ayudamos a evitar que un error en un trozo de programa pueda afectar al resto. La forma correcta de pasar datos entre distintos trozos de programa es usando los parámetros de cada función, como en el anterior ejemplo.

Ejercicios propuestos :

  • Crear una función ?pedirEntero?, que reciba como parámetros el texto que se debe mostrar en pantalla, el valor mínimo aceptable y el valor máximo aceptable. Deberá pedir al usuario que introduzca el valor tantas veces como sea necesario, volvérselo a pedir en caso de error, y devolver un valor correcto. Probarlo con un programa que pida al usuario un año entre 1800 y 2100.
  • Crear una función ?escribirTablaMultiplicar?, que reciba como parámetro un número entero, y escriba la tabla de multiplicar de ese número (por ejemplo, para el 3 deberá llegar desde 3x0=0 hasta 3x10=30).
  • Crear una función ?esPrimo?, que reciba un número y devuelva el valor 1 si es un número primo o 0 en caso contrario.
  • Crear una función que reciba una cadena y una letra, y devuelva la cantidad de veces que dicha letra aparece en la cadena. Por ejemplo, si la cadena es "Barcelona" y la letra es 'a', debería devolver 2 (aparece 2 veces).
  • Crear una función que reciba un número cualquiera y que devuelva como resultado la suma de sus dígitos. Por ejemplo, si el número fuera 123 la suma sería 6.
  • Crear una función que reciba una letra y un número, y escriba un ?triángulo? formado por esa letra, que tenga como anchura inicial la que se ha indicado. Por ejemplo, si la letra es * y la anchura es 4, debería escribir

****
***
**
*

 

 

Actualizado el: 25-07-2014 17:10

AnteriorPosterior