第十三课 作用域与生存周期

1.引用一个变量时要注意两点,一点是注意变量是否存在,也就是有没有被定义,第二点是变量的作用范围。

2定义一个变量,就是为变量分配空间。引用变量就是引用变量内容。

比如:int i=1;

       定义了一个整形变量i。编译器会为它分配一个地址(空间)用来存放i,由于是int型的变量,所以是4个字节。里面存放了一个数字1,这个1就是变量的内容。

       引用变量:比如j=i,就是把i的值赋给了j,j=1;

二。作用域。

      

比如在这个函数中,我在main里定义一个i 变量,这个i可以在main中使用,但是在getsecond函数中不能使用,同理,在getsecond中定义一个变量,main函数中也不能使用。

在main中的i,能够使用的范围是有限,他的存在范围叫做作用域,所谓作用域就是变量能够被引用的范围。

定义在函数中的变量叫做局部变量,他只能在局部范围内使用,一般来件,在函数中定义的变量的作用域是从定义开始到本函数结束。

即使在main中,如果在定义i的前面使用i,也是有问题的。

ps:同一作用域内不允许出现同名现象,不如在main中,如果已经有了int i=1,那么就不允许出现第二次定义i。

 

2.既然存在局部变量,也就存在全局变量,所谓的全局变量就是在函数外定义的变量。

在这两张图中可以看出,j声明在函数之外,所以两个函数都可以引用到,这样的变量叫做全局变量。

这个程序和上面有些不同,在main中int j=1,而在外部有一个全局变量int j=0,但是最后没有出错,输出j=1.这是因为两个j不再同一个作用域中。

3.生命周期

   变量分为两种,一种为动态变量,一种为静态变量。

   一般我们省略不写动态变量,比如声明一个整形变量int i;实际上他是动态变量,auto int i;

这样的变量在函数运行时分配空间,在函数结束时就会释放。

还有一种静态变量,声明方式为static int i;他从程序运行开始分配空间,程序结束后被释放。

比如:

在这个程序中,fun函数定义了两个变量,i为静态变量,j为动态变量。

在main中调用函数,每次调用函数i和j都会自加1,但是j却不会变化,而i却在变化,这是因为两种变量的生命周期不同。

动态变量会在函数使用完毕之后释放,而动态变量在程序结束之后才会释放,函数结束时它仍然存在。

4.分配空间

程序运行需要给函数分配空间,空间分为三种,1.动态区,2静态区,3堆区(程序员区)。

动态变量分配在动态区,静态变量分配在静态区。

动态区在函数编译结束就会被释放,静态区在程序结束后才会被释放。

PS:全局变量时静态变量,被分配在静态区。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值