作者在 2016-04-08 15:56:03 发布以下内容
1.变量生存周期
一旦在程序中定义变量,计算机在执行过程中就会根据变量的类型分配相应的内存单元供变量保存数据。
只有当函数被调用时,其形参和局部变量才被分配相应存储单元,一旦调用结束,相应的存储单元由系统收回。由于这种特性,局部变量还被称为自动变量。
变量从定义开始分配存储单元,到运行结束存储单元被回收,整个过程称为变量生存周期。
2.变量存储的内存分布
由于自动变量和全局变量的生存周期不同,为了便于计算机存储管理,C语言把保存所有变量的数据区分为动态存储区(使用堆栈进行管理),静态存储区(相对固定,管理较简单)。用户存储区包括程序区和数据区,程序代码和数据变量是分开存放的。
举例说明:
#include <stdio.h>
int x;
int f();
int main(void){
int a=1;
x=a;
a=f();
printf("%d%d",x,a);
retirn 0;
}
int f(){
int y=4;
return y;
}
用表格进行示意:
程序区: |
主函数 |
f() |
数据区: |
静态存储区: |
全局变量:x |
|
|
静态局部变量 |
|
动态存储区: |
main()变量区:a |
|
|
f()变量区:y |
3.静态变量:
其生存周期持续到程序结束。由于存储单元被保留,一旦含有静态局部变量的函数被再次调用,则静态局部变量会被重新激活,上次的值依旧保留。
静态变量的定义的格式:
static 类型名 变量表
举个例子:
#include <stdio.h>
int x;
int f();
int main(void){
int a=1,i;
x=a;
for(i=1;i<5;i++)
a=f();
printf("我果然%d到不行.",a);
return 0;
}
int f(){
static int y=6;
y=y*10+6;
return y;
}
y即为静态局部变量。
使用静态变量的注意点:如果未赋值,自动赋值为0。若赋过值,只在函数第一次调用时起作用。
静态函数与全局函数的异同:它们的生存周期都贯穿程序执行过程。区别在作用范围不同,全局可作用于所有函数,而静态只作用于其定义的函数。
写了博客,概念透彻不少。我果然勤学善思,好闻成才