更改函数中的全局变量

Changing global variables in functions

本文关键字:全局变量 函数      更新时间:2023-10-16

我正在通过"通过游戏开发开始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;
}