C++ Ámbito de variables

Generalmente, hay tres lugares donde se pueden definir variables:

  • Las variables declaradas dentro de una función o bloque de código se denominanvariables locales。

  • Las variables declaradas en la definición de los parámetros de una función se denominanparámetros formales。

  • Las variables declaradas fuera de todas las funciones se denominanvariables globales。

El ámbito es una región del programa. El ámbito de una variable se puede clasificar en los siguientes tipos:

  • Ámbito local: Las variables declaradas dentro de una función tienen ámbito local y solo se puede acceder a ellas dentro de la función. Las variables locales se crean cada vez que se llama a la función y se destruyen cuando la función termina de ejecutarse.

  • Ámbito global: Las variables declaradas fuera de todas las funciones y bloques de código tienen ámbito global y pueden ser accedidas por cualquier función del programa. Las variables globales se crean al inicio del programa y se destruyen al final del programa.

  • Ámbito de bloque: Las variables declaradas dentro de un bloque de código tienen ámbito de bloque y solo se puede acceder a ellas dentro del bloque. Las variables de ámbito de bloque se crean cada vez que se ejecuta el bloque y se destruyen cuando el bloque termina de ejecutarse.

  • Ámbito de clase: Las variables declaradas dentro de una clase tienen ámbito de clase y pueden ser accedidas por todas las funciones miembro de la clase. El ciclo de vida de las variables de ámbito de clase es el mismo que el de la clase.

Nota:Si una variable declarada en un ámbito interno tiene el mismo nombre que una variable del ámbito externo, la variable del ámbito interno sobrescribirá a la variable del ámbito externo.

Variable local

Las variables declaradas dentro de una función o bloque de código se denominan variables locales. Solo pueden ser utilizadas por las sentencias dentro de la función o bloque de código. El siguiente ejemplo utiliza variables locales:

Ejemplo

#include <iostream> using namespace std; int main () { // declaración de variable local int a, b; int c; // inicialización real a = 10; b = 20; c = a + b; cout << c; return 0; }

Variable global

Las variables definidas fuera de todas las funciones (normalmente al principio del programa) se denominan variables globales. El valor de una variable global es válido durante todo el ciclo de vida del programa.

Las variables globales pueden ser accedidas por cualquier función. Es decir, una vez declarada una variable global, está disponible en todo el programa. El siguiente ejemplo utiliza variables globales y locales:

Ejemplo

#include <iostream> using namespace std; // declaración de variable global int g; int main () { // declaración de variable local int a, b; // inicialización real a = 10; b = 20; g = a + b; cout << g; return 0; }

En un programa, los nombres de las variables locales y globales pueden ser iguales, pero dentro de una función, el valor de la variable local sobrescribirá el valor de la variable global. A continuación se muestra un ejemplo:

Ejemplo

#include <iostream> using namespace std; // declaración de variable global int g = 20; int main () { // declaración de variable local int g = 10; cout << g; return 0; }

Cuando el código anterior se compila y ejecuta, produce el siguiente resultado:

10

Inicializar variables locales y globales

Cuando se define una variable local, el sistema no la inicializa; usted debe inicializarla por sí mismo. Al definir una variable global, el sistema la inicializa automáticamente con los siguientes valores:

Tipo de datoValor inicial por defecto
int 0
char '\0'
float 0
double 0
pointer NULL

Inicializar las variables correctamente es un buen hábito de programación; de lo contrario, a veces el programa puede producir resultados inesperados.


El ámbito de bloque se refiere a las variables declaradas dentro de un bloque de código:

Ejemplo

#include <iostream>

int main() {
    int a = 10;
    {
        int a = 20;  // variable de ámbito de bloque
        std::cout << "Variable de bloque: " << a << std::endl;
    }
    std::cout << "Variable externa: " << a << std::endl;
    return 0;
}

En el ejemplo anterior, se declara una variable llamada a dentro del bloque interno, que tiene el mismo nombre que la variable a del ámbito externo. La variable a del ámbito interno sobrescribirá a la variable a del ámbito externo; al acceder a a en el ámbito interno se imprime 20, mientras que al acceder a a en el ámbito externo se imprime 10.

Cuando el código anterior se compila y ejecuta, produce el siguiente resultado:

块变量: 20
外部变量: 10

Ámbito de clase

El ámbito de clase se refiere a las variables declaradas dentro de una clase:

Ejemplo

#include <iostream>

class MyClass {
public:
    static int class_var;  // variable de ámbito de clase
};

int MyClass::class_var = 30;

int main() {
    std::cout << "Variable de clase: " << MyClass::class_var << std::endl;
    return 0;
}

En el ejemplo anterior, se declara una variable de ámbito de clase llamada class_var en la clase MyClass. Se puede acceder a esta variable usando el nombre de la clase y el operador de resolución de ámbito::para acceder a esta variable. Al acceder a class_var en la función main(), se imprime 30.

类变量: 30
Otras extensiones