我们已经在前面学习了变量,并且能够熟练地使用它。可是,仅仅靠这些知识,有些问题仍然无法得到解决。
然而,可能会遇到这样的问题:我们想要创建一个变量作为数据缓冲区(Buffer),分别供数据生成、数据处理和数据输出三个函数使用,三个函数都要能够读取或修改这个变量的值。显然通过传递参数或返回值来解决这个问题是非常麻烦的。
那么,我们能否建立一个变量能够让这三个函数共同使用呢?在C++中,我们可以在函数体外声明一个变量,它称为全局变量(global variable)。所谓全局,是指对于所有函数都能够使用。当然,在该变量声明之前出现的函数是不知道该变量的存在的,于是也就无法使用它了。另外,如果我们声明了一个全局变量之后没有对它进行初始化操作,则编译器会自动将它的值初始化为0。
下面,我们就用全局变量来实现刚才提出的那个问题:(程序11.1.1)
#include "iostream.h"
#include "stdlib.h"//用于产生随机数,不必理会
#include "time.h"//用于产生随机数,不必理会
#include "iomanip.h"//用于设置域宽
void makenum();
void output();
void cal();
int main()
{
srand(time(NULL));//用于产生随机数,不必理会
for (int i=0;i<4;i++)
{
makenum();//产生随机数放入缓冲区
cal();//对缓冲区的数进行处理
output();//输出缓冲区的数值
}
return 0;
}
int buffer;//定义全局变量,以下函数都能使用它
void makenum()
{
cout <<"Running make number..." <<endl;
buffer=rand();//把产生的随机数放入缓冲区
}
void cal()
{
cout <<"Running calculate..." <<endl;
buffer=buffer%100;
}
void output()
{
cout <<"Running output..." <<endl;
cout <<setw(2) <<buffer <<endl;
标志符
首先要来介绍一下什么是标志符。在程序设计的过程中,经常要给变量、函数甚至是一些数据类型起名字(还包括以后的类名,对象名等)。我们把这些用户根据一些规定,自己定义的各种名字统称为标志符(Identifier)。显然,标志符不允许和任何保留字相同。全局变量和局部变量
在函数这一章节中,我们说过函数体内声明的变量仅在该函数体内有效,别的函数是无法使用的。并且在函数运行结束后,这些变量也将消失了。我们把这些在函数体内声明的变量称为局部变量(Local Variable)。然而,可能会遇到这样的问题:我们想要创建一个变量作为数据缓冲区(Buffer),分别供数据生成、数据处理和数据输出三个函数使用,三个函数都要能够读取或修改这个变量的值。显然通过传递参数或返回值来解决这个问题是非常麻烦的。
那么,我们能否建立一个变量能够让这三个函数共同使用呢?在C++中,我们可以在函数体外声明一个变量,它称为全局变量(global variable)。所谓全局,是指对于所有函数都能够使用。当然,在该变量声明之前出现的函数是不知道该变量的存在的,于是也就无法使用它了。另外,如果我们声明了一个全局变量之后没有对它进行初始化操作,则编译器会自动将它的值初始化为0。
下面,我们就用全局变量来实现刚才提出的那个问题:(程序11.1.1)
#include "iostream.h"
#include "stdlib.h"//用于产生随机数,不必理会
#include "time.h"//用于产生随机数,不必理会
#include "iomanip.h"//用于设置域宽
void makenum();
void output();
void cal();
int main()
{
srand(time(NULL));//用于产生随机数,不必理会
for (int i=0;i<4;i++)
{
makenum();//产生随机数放入缓冲区
cal();//对缓冲区的数进行处理
output();//输出缓冲区的数值
}
return 0;
}
int buffer;//定义全局变量,以下函数都能使用它
void makenum()
{
cout <<"Running make number..." <<endl;
buffer=rand();//把产生的随机数放入缓冲区
}
void cal()
{
cout <<"Running calculate..." <<endl;
buffer=buffer%100;
}
void output()
{
cout <<"Running output..." <<endl;
cout <<setw(2) <<buffer <<endl;










