2020.2.28日,封城一个多月了,紧邻毕业期,我在家抽空学习一下C。
看到了变量的存储方式和生存期这一章节,下面就是我整理的内容
下面是用于理解静态局部变量这个概念所写的代码,主要是需要分析一下函数f()中 静态局部变量c的变化,我们可以明显的发现c在三次调用结束后的值分别是4、5、6,静态局部变量还有一个明显特点是在编译时就赋初值,程序运行时就有初值,以后每次调用不再赋初值而只是保留上次函数调用结束的值。自动变量赋初值不是在编译的时候进行,而是在函数调用的时候进行,每调用一次相当于执行一次赋值语句(题外话插一句,C中的静态局部变量和matlab中persistent定义的变量其实是一个意思,因为我在simulink中调用matlab function时会用到这,所以提一下)
#include<stdio.h>
int main()
{ int f(int); //函数声明
int a = 2, i; //自动局部变量
for (i = 0; i < 3; i++)
printf("f(a) = %d\t", f(a)); //输出f(a)的值,c的值在三次调用结束后的值分别是4、5、6
return 0;
}
int f(int a)
{ auto int b = 0; //自动局部变量
static int c = 3; //静态局部变量
b = b + 1;
c = c + 1;
return(a + b + c);
}
其实后面还讲到了变量的作用阈和生存期,以及静态函数(只作用于本文件的函数,需要用Static声明) 外部函数(可供其他文件调用的函数,默认的,也可以用extern声明),只不过我比较懒,就不往上写了,如果后期碰到相关的项目或者习题需要用到,我再详细解释,加深印象!
参考文献【1】C语言程序设计第四版,P204-217