1. static修饰变量
a. 函数中局部变量:
生命周期延长:该变量不随函数结束而结束
初始化:只在第一次调用该函数时进行初始化
记忆性:后序调用时,该变量使用前一次函数调用完成之后保存的值
存储位置:不会存储在栈上,放在数据段
b. 全局变量
改变该变量的链接属性,让该变量具有文件作用域,即只能在当前文件中使用
注:如果有一个项目,由A,B,C 三个人来完成,完成之后需要对接,但是三个人的程序中都有Add()函数,这样会使项目对接时无法辨别使用那个函数,若是再函数前加上static就可以避免这种错误,Add()函数只能在各自的程序中运行无法跨程序运行。
c. 修饰变量时,没有被初始化时会被自动初始化为0
2. static修饰函数
改变该函数的链接属性,让该函数具有文件作用域,即只能在当前文件中使用
3.例题:
#include <stdio.h> int sum(int a) { int c = 0; static int b = 3; c += 1; b += 2; return (a + b + c); } int main() { int i; int a = 2; for (i = 0; i < 5; i++) { printf("%d,", sum(a)); } }
输入:
观察下述循环b的变化,b没有随着循环再次初始化为3,而是使用了前一次函数调用完成之后保存的值。
第一次循环:a=2 b=5 c=1 a+b+c=8
第二次循环:a=2 b=7 c=1 a+b+c=10
第二次循环:a=2 b=9 c=1 a+b+c=12
第二次循环:a=2 b=11 c=1 a+b+c=14
第二次循环:a=2 b=13 c=1 a+b+c=16
注:static修饰的参数创建在内存的静态区。