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