C++程序的结构

1.变量的类型

除了按数据类型区分变量外,根据变量定义的位置,可以把变量分成全局变量(global variable)与局部变量(local variable)。全局变量是指定义在函数体外部的变量,它能被所有函数使用。局部变量是指定义在函数或复合语句中定义的变量,只能在函数或复合语句中使用

int g=100000;
int sum(int x, int y)
{
     int sum=0;
    for(int i=x;i<=y;i++)
          sum=sum+i;
          return sum;
}
int main() 
{
          int x=1,y=100;
          cout<<sum(x,y)+g<<endl;
          return 0;
}

其中g为全局变量,sum()中下,x,y为全局变量,main()中的x,y为局部变量

2.变量的存储类型

C++中变量有auto 、extern、register、static四种存储类型。

1.auto说明符          

auto说明符说明定义的是一个局部变量。函数中的局部变量,如果不用关键字static加以声明,编译系统对它们是动态分配存储空间的。局部变量默认存储类型为auto,所以在程序中很少使用auto说明符说明。

2. register说明符          

为提高执行效率,C++允许将局部变量的值存放在CPU的寄存器中,需要时直接从寄存器中取出参加运算,不必到内存中去存取,这种类型的局部变量称为寄存器变量,用关键字register声明。在程序中定义寄存器变量对编译系统只是建议性的,而不是强制性的。

3. extern说明符    

如果一个完整的计算机程序很大,分成多个模块,放在不同的文件中,分开编译成目标文件,最后连接成一个完整的可执行代码。对于所有模块共同使用的全局变量,如果在所有的模块中都定义,在连接时就会出错。     解决办法是只在一个模块中定义全局变量,在其他模块中用extern说明这是一个“外来”的全局变量。

4. static说明符      

static说明符用于在定义变量时将变量声明为成static(静态)变量。   其格式为:

static  数据类型 变量名=初值;

static可用来声明全局静态变量和局部静态变量。当声明全局静态变量时,全局静态变量只能供本模块使用,不能被其它模块再声明为extern变量。      

例如:将程序p4_1_p.cpp中的全局变量声明为:

                            static int G=0;      

那么在其他模块中就不能声明为:                            

                extern int G;   //错误,G已经是一个static变量;

注意:   当一个局部变量声明为static变量,它既具有局部变量的性质:只能在函数体局部存取;又具有全局变量的性质:函数多次进入,变量的值只初始化一次。因此静态局部变量实质是一个供函数局部存取的全局变量。

运行结果:
m=1 n=1
m=1 n=2
m=1 n=3
m=1 n=4

3.变量在内存中的存储

当一个程序准备运行时,操作系统会为程序分配一块内存空间,C++程序的内存通常被分为四个区:       

①全局数据区(data area)       

②代码区(code area)       

③栈区(stack area)       

④堆区(heap area)          

        全局变量、静态变量、字符串常量和常变量存放在全局数据区;所有的函数和代码存放在代码区;为运行函数而分配的函数参数、局部变量和返回地址存放在栈区;动态分配内存在堆区。               变量的生存期为从产生到消失的时期。全局变量、静态变量、常变量生存周期为整个程序的生存周期,因此称为静态生存期;局部变量的生存周期起于函数调用,结束于函数调用结束,其生存期是动态的,因此称为动态生存期。

注意:    堆空间不是系统为程序自动分配的,它是程序执行过程中由new语句为变量分配的。即使指向堆空间的指针变量消失,new语句分配的空间也不会消失。new语句分配的空间由delete语句释放。

解释 : 当函数被调用时才为函数的形参、返回代码地址、局部变量分配空间。由于空间 在栈中,所以从栈底开始依次按形参、返回代码地址、局部变量的顺序从高地址 向低地址分配。其中,在分配形参地址时,按从右向左的顺序;分配各局部变量 的地址时,按定义的先后次序。 当函数调用结束,该函数占用的栈空间收回。收回的顺序(即各变量消失的顺序) 与分配的顺序相反。 程序运行时,系统为各个函数的执行代码在代码段中分配空间,然后将代码调入 内存。各函数在代码区的排列次序按函数定义的先后次序。程序运行结束,程序 占用的代码段空间收回。 全局常变量、全局变量、局部静态变量、字符串常量在程序运行前在全局数据区 进行分配。并且依次按照全局常变量、全局变量、局部静态变量的顺序从低地址 向高地址分配,其中各类变量按定义的先后次序分配。 当程序运行结束后,各全局变量的空间被系统收回,收回的顺序与分配的顺序相 同,即:先分配先收回。 堆空间不是系统为程序自动分配的,它是程序执行过程中由new语句为变量分配 的。即使指向堆空间的指针变量消失,new语句分配的空间也不会消失。New语句 分配的空间由delete语句释放。 变量的生存期为从产生到消失的时期。全局变量、静态变量、常变量生存周期为 整个程序的生存周期,因此称为静态生存期;局部变量的生存周期起于函数调用, 结束于函数调用结束,其生存期是动态的,因此称为动态生存期。

  • 21
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值