当前位置: 首页 > article >正文

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

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

// #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;
}

在这里插入图片描述


http://www.kler.cn/a/377826.html

相关文章:

  • 《Mycat核心技术》第06章:Mycat问题处理总结
  • 如何识别钓鱼邮件和诈骗网站?(附网络安全意识培训PPT资料)
  • springBoot发布https服务及调用
  • Scala项目(图书管理系统)
  • Linux 常见用例汇总
  • c# 后台任务自动执行
  • postman 获取登录接口中的返回token并设置为环境变量的方法 postman script
  • GB/T 28046.3-2011 道路车辆 电气及电子设备的环境条件和试验 第3部分:机械负荷(4)
  • Spring Boot 集成 ActiveMQ 实战指南
  • Rust 文档生成与发布
  • 第三十五篇:HTTP报文格式,HTTP系列二
  • 三种网络配置方法nmcli、ip、ifcfg文件
  • parted 磁盘分区
  • Vue将所展示文本内容的换行与空格显示出来
  • React + SpreadJS 开发时常见问题
  • 配置elk插件安全访问elk前台页面
  • 插值表达式
  • 【缓存与加速技术实践】Redis集群
  • YOLOv6-4.0部分代码阅读笔记-common.py
  • 如何完成redis集群部署及性能优化?
  • K8S概念及其常见组件和整体架构
  • Git下载-连接码云-保姆级教学(连接Gitee失败的解决)
  • 【Jetson AGX Orin(Arm Linux)安装pyqt5及Format_BGR888报错】
  • 学Linux的第六天
  • [SWPUCTF 2021 新生赛]web方向(七到11题) 解题思路,实操解析,解题软件使用,解题方法教程
  • 科普 | 子母钟系统是什么?网络时钟同步的重要性?