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

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:全局变量时静态变量,被分配在静态区。