📌  相关文章
📜  如果C C++中存在具有相同名称的局部变量,则如何访问全局变量(1)

📅  最后修改于: 2023-12-03 15:09:18.629000             🧑  作者: Mango

如果C/C++中存在具有相同名称的局部变量,则如何访问全局变量

在C/C++的程序中,可能会存在相同名称的全局变量和局部变量,如果在局部作用域中直接使用该名称,则默认访问的是局部变量。但是,在某些情况下,我们需要访问全局变量而不是局部变量,本文将介绍几种方法来实现这一目的。

1. 使用全局变量的完整名称

在程序中,全局变量会有其完整的名称,即包括命名空间、类名等。通过使用完整名称来访问全局变量,可以避免与局部变量的名称冲突。例如,假设在程序中有一个全局变量 g_var,在函数中有一个同名的局部变量,那么可以通过以下方式访问全局变量:

int g_var; //全局变量
void foo()
{
    int g_var; //局部变量
    ::g_var = 10; //访问全局变量
}

在访问全局变量时,需要使用 :: 操作符来指定完整名称,以区别于同名的局部变量。

2. 使用关键字 extern

关键字 extern 用于指示变量或函数在其他位置定义,可以将全局变量的声明和定义分离。在这种情况下,使用 extern 关键字可以指示使用全局变量而不是同名的局部变量。例如:

int g_var = 5; //定义全局变量
void foo()
{
    int g_var = 10; //定义局部变量
    extern int g_var; //声明全局变量
    g_var = 20; //访问全局变量
    ::g_var = 30; //也可以使用完整名称访问全局变量
}

使用 extern 关键字声明全局变量后,即可在局部作用域中访问全局变量。在使用 extern 关键字时,一般建议将全局变量的声明放在头文件中,以提供其他文件的访问。

3. 使用指针

通过指针可以间接地访问全局变量,同样可以避免与同名的局部变量冲突。通过在局部作用域中定义指针变量并将其指向全局变量,即可访问全局变量。例如:

int g_var = 5; //定义全局变量
void foo()
{
    int g_var = 10; //定义局部变量
    int* p_g_var = &::g_var; //指向全局变量的指针
    *p_g_var = 20; //通过指针访问全局变量
    ::g_var = 30; //也可以使用完整名称访问全局变量
}

在使用指针访问全局变量时,需要使用 & 操作符获取全局变量的地址,并定义一个指向该地址的指针变量。然后通过指针变量访问全局变量。

总结

在C/C++程序中,可能存在相同名称的全局变量和局部变量,为避免名称冲突,建议使用完整名称访问全局变量,或者使用关键字 extern 显式地指示全局变量,或者使用指针间接地访问全局变量。这些方法都可以有效地解决名称冲突问题。