C++ Ámbito de las variables

Enviado por jvilella el Lun, 23/09/2019 - 03:42

Requisitos:

Las variables tienen un "ámbito" ("scope"en inglés). El ámbito determina dónde se puede utilizar una variable y dónde no:
 - Una variable no se puede utilizar antes de su declaración
 - Una variable no se puede utilizar fuera de la función donde ha sido declarada (excepto las variables globales)
 - Una variable solo se puede utilizar dentro de la estructura de control (if, while, función, etc) donde ha sido definida

Ejemplos de códigos incorrectos:

int main() {
    if (1=1) {
        int valor = 0;    // declaracion de la variable valor
    }
    cout << valor;    // "valor" solo existe dentro del if, pero ahora estamos fuera
}
int main() {
    while(true) {
        int variable;    //declaracion de variable
        cin >> variable;
        if (variable >= 18) {
            bool mayorEdad = true;    //declaracion de mayorEdad
            cout << variable;
        }
        if (mayorEdad) {     // "mayorEdad" solo existe dentro del if anterior, aquí ya no existe
            cout << "Mayor";
        }
    }
    cout << variable;     // "variable" solo existe dentro del while, aquí ya no existe
}

Un ejemplo más complejo pero más claro:

int main() {
    int valor = 10;
    if (true) {
        int valor = 1000;
        cout << valor << endl;
    }
    cout << valor << endl;
}

El primer cout mostrará "1000", lógico, pero el segundo mostrará "10". ¿Por qué? Por que al entrar en el if hemos declarado una NUEVA variable "valor" (1000) que al salir de if se ha destruido y nos hemos quedado solo con la primera variable "valor", que tiene todavía el valor "10", por tanto al llegar al segundo cout la variable "valor" a la que se refiere es la primera, de hecho la única que queda. En general, es muy mala idea usar dos veces el mismo nombre de variable (de hecho, si declaras la misma variable dos veces dentro de la misma estructura no te compilará).

 

Printer Friendly, PDF & Email

Añadir nuevo comentario

Texto sin formato

  • No se permiten etiquetas HTML.
  • Saltos automáticos de líneas y de párrafos.
  • Las direcciones de correos electrónicos y páginas web se convierten en enlaces automáticamente.