c++中局部变量和全局变量同名,使用::访问全局变量

发布于:2024-11-02 ⋅ 阅读:(55) ⋅ 点赞:(0)

局部变量能否和全局变量重名?
答:能,局部会屏蔽全局。要用全局变量,需要使用”::”
局部变量可以与全局变量同名,在函数内引用这个变量时,会用到同名的局部变量,而不会用到全局变量。对
于有些编译器而言,在同一个函数内可以定义多个同名的局部变量,比如在两个循环体内都定义一个同名的局
部变量,而那个局部变量的作用域就在那个循环体内

// #include <iostream>
// using namespace std;

// // 函数演示:通过指针和引用修改变量
// void modifyWithPointer(int* p) {
//     if (p) { // 检查指针是否为null
//         *p += 10;
//     }
// }

// void modifyWithReference(int& ref) {
//     ref += 10;
// }

// int main() {
//     int a = 5;

//     // 1) 引用必须被初始化,指针可以不初始化
//     int* ptr;             // 未初始化的指针
//     int& ref = a;         // 引用必须在定义时初始化,且不能更改
//     ptr = &a;             // 指针可以随时指向某个变量

//     // 输出初始值
//     cout << "Initial value of a: " << a << endl;

//     // 2) 引用初始化后不能改变,而指针可以改变所指对象
//     int b = 20;
//     ptr = &b;             // 指针可以指向新的对象
//     // ref = b;           // 错误:引用不能重新绑定到另一个变量

//     // 通过指针和引用修改变量
//     modifyWithPointer(ptr); // b += 10;
//     cout << "Value of b after modifyWithPointer: " << b << endl;

//     modifyWithReference(ref); // a += 10;
//     cout << "Value of a after modifyWithReference: " << a << endl;

//     // 3) 指针可以为空,而引用不能指向空值
//     ptr = nullptr;         // 指针可以指向空值
//     // int& invalidRef;    // 错误:引用必须初始化且不能为空

//     // 常见使用场景:流操作符和赋值操作符返回引用
//     cout << "Stream operators << and >> return a reference:" << endl;
//     cout << a << endl;

//     // 引用在赋值操作符重载中
//     int x = 100;
//     int y = 200;
//     // cout << "address of x: " << &x << endl;
//     // cout << "address of y: " << &y << endl;
//     y = x;                // 赋值操作符使用值传递

//     cout << "Value of y after assignment: " << y << endl;
//     // cout << "address of x: " << &x << endl;
//     // cout << "address of y: " << &y << endl;

//     return 0;
// }


#include <iostream>
using namespace std;

int var = 100; // 全局变量

void myFunction() {
    int var = 50; // 局部变量,与全局变量同名

    cout << "局部变量 var 的值: " << var << endl;       // 输出局部变量的值
    cout << "全局变量 var 的值: " << ::var << endl;    // 使用作用域解析符访问全局变量
}

int main() {
    cout << "在 main 函数中,直接访问全局变量 var 的值: " << var << endl;
    myFunction();

    {
        int var = 30; // 在局部作用域中的变量
        cout << "在局部作用域中,局部变量 var 的值: " << var << endl;
        cout << "使用 :: 访问全局变量 var 的值: " << ::var << endl;
    }

    cout << "回到 main 函数中,访问全局变量 var 的值: " << var << endl;

    return 0;
}

在这里插入图片描述


网站公告

今日签到

点亮在社区的每一天
去签到