更改函数中的全局变量
Changing global variables in functions
我正在通过"通过游戏开发开始c ++的课程"一书学习c ++。
当我声明一个全局变量时,这个全局变量是不可更改的。当im在函数中声明局部变量时,它应该简单地隐藏全局变量。问题是,在函数中声明局部变量时,我似乎正在更改全局变量。以下代码将帮助我解释:
//the code
// ConsoleApplication64.cpp : Defines the entry point for the console application.
//
#include <iostream>
#include <string>
using namespace std;
int glob = 10; //The global variable named glob
void access_global();
void hide_global();
void change_global();
int main()
{
cout << "In main glob is: " << glob << endl;
access_global();
cout << "In main glob is: " << glob << endl;
hide_global();
cout << "In main glob is: " << glob << endl;
change_global();
cout << "In main glob is: " << glob << endl;
system("pause");
return 0;
}
void access_global(){
cout << "In access global is: " << glob << endl;
}
void hide_global(){
glob = 0;
cout << "In hide global is: " << glob << endl;
}
void change_global(){
glob = 5;
cout << "In change global is: " << glob << endl;
}
当我第一次在 int main 中使用 glob 时,它具有全局值 10。然后我在一个函数中找出 glob,它似乎工作正常,5。然后我想再次在 main 中搜索 glob,却发现值已从全局 10 变为局部 5。这是为什么呢?根据这本书,这不应该发生。我在Visual Studio 2010 Microsoft工作。
代码:
void hide_global(){
glob = 0;
cout << "In hide global is: " << glob << endl;
}
不是声明任何新变量,而是分配给一个名为 glob
的现有变量,这是您的全局变量。要在函数中声明一个新变量,您还需要指定数据类型,如下所示:
void hide_global(){
int glob = 0;
cout << "In hide global is: " << glob << endl;
}
您不会在任何 hide_global
函数中创建局部变量,而只是更改全局变量。要创建新的本地版本,请执行以下操作:
void hide_global(){
int glob = 0; //note the inclusion of the type to declare a new variable
cout << "In hide global is: " << glob << endl;
}
void hide_global(){
glob = 0;
cout << "In hide global is: " << glob << endl;
}
您根本没有在此处隐藏全局变量。您只需将0
分配给全局变量。事实上,它与你的change_global
函数完全相同 - 那么你为什么期望它的行为有任何不同呢?
要隐藏变量,您需要声明一个新变量。变量声明由类型、名称和可选的初始化器组成。对于您的代码,它如下所示:
void hide_global(){
int glob = 0;
cout << "In hide global is: " << glob << endl;
}
相关文章:
- 内联函数中具有内部链接的全局变量
- 如何在信号处理程序和普通函数中对全局变量进行互斥读写操作
- C++ 在编译时具有函数计算全局变量
- 修改程序的入口点时未调用全局变量的构造函数
- 赋予全局变量而不是局部变量优先级的函数 - (异常行为)
- std::线程不是全局变量,但在到达创建它的函数的末尾时不会超出范围?
- 如何在全局变量的构造函数之前运行函数
- 如何获取使用全局变量的所有函数名称?
- 在 C++17 中修改 constexpr 函数中的全局变量
- C++从 std::async 函数读取命名空间中的全局变量标志
- 为什么我的类函数不使用我的全局变量?
- 有什么理由C++ 11+ std::mutex 应该声明为全局变量,而不是作为函数参数传递到 std::thread 中
- 将全局变量的名称作为输入并更改其值的函数
- 如何在LUA C API中分配全局LUA函数变量
- 如何使用 c++ 中的函数访问全局变量?
- 是否可以通过全局变量定义具有可变参数数的函数中的参数数量
- 如何创建用于多个源文件的全局变量/包含/函数
- 查找全局变量,而不是在 c++ 函数中构造它们
- 通过使用全局变量的函数访问在给定范围内被覆盖的变量
- 全局变量- c++函数跳过代码