我正在学习c ++课程'课程开始c ++通过游戏开发'。
当我声明一个全局变量时,这个全局变量不可变。当我在一个函数中声明一个局部变量时,它应该只是隐藏全局变量。问题是,似乎在声明函数中的局部变量时我改变了全局变量。以下代码将帮助我解释:
//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。然后我在一个函数中cout the glob它似乎正常工作,5。然后我想再次在主要的cout glob,只找出价值已经从全球变化,10变为本地5.这是为什么?根据这本书,这不应该发生。我在Microsoft visual studio 2010工作。
答案 0 :(得分:2)
您不是在任何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;
}
答案 1 :(得分:2)
代码:
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;
}
答案 2 :(得分:1)
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;
}