2、静态变量 所有全局变量和用关键字stac作存储类型说明 的局部变量称为静态变量 静态变量存放在静态存储区,一旦为其分配了 存储单元,它们在整个程序执行期间将固定地占 用这些存储单元。 由于所有全局变量都是静态类的,C规定,在 定义全局变量时“ static”可以省去不写。 静态全局变量仅能为本源文件中各函数使用 不能为本源文件以外的其他源文件使用
2、静态变量 所有全局变量和用关键字static作存储类型说明 的局部变量称为静态变量。 静态变量存放在静态存储区,一旦为其分配了 存储单元,它们在整个程序执行期间将固定地占 用这些存储单元。 由于所有全局变量都是静态类的,C规定,在 定义全局变量时“static”可以省去不写。 静态全局变量仅能为本源文件中各函数使用, 不能为本源文件以外的其他源文件使用
静态变量举例 程序运行结果 int hanshu( int x m=0,n=5,V=0 i static int m, n=5 /定义m,n为静态局部变量 Hanshu(2)=10 int y=0; m=1,n=6,y=0 printf("m=%d, n=od, y=%d\n",m,n, y)>2)hanshu(2)=12 m++;n++;y++ return(X+y+m+n ) m=2,n=7,y=0 hanshu(2)=14 main() f int a=2,k; for(k=1;k<=3k++) printf(%odhanshu (%od=%odn", k, a, hanshu(a))
静态变量举例 int hanshu( int x ) { static int m, n=5; /* 定义m,n为静态局部变量*/ int y=0 ; printf("m=%d,n=%d,y=%d\n", m, n, y); m++ ; n++ ; y++ ; return ( x+y+m+n ); } main ( ) { int a=2 , k ; for ( k=1;k<=3;k++) printf("%d)hanshu(%d)=%d\n",k, a, hanshu(a)); } 程序运行结果: m=0,n=5,y=0 1)hanshu(2)=10 m=1,n=6,y=0 2)hanshu(2)=12 m=2,n=7,y=0 3)hanshu(2)=14
例局部静态变量的特点示例。 #include <stdio. h> void f (int n) 程序运行结果 NO.1:s=1 static int s=0: NO.2:s=2 S+1 printf("No%od: S=%dn", n, S) NO.3:s=3 void maino int num: for(num=l;num<4; num++) f(num);
例 局部静态变量的特点示例。 #include <stdio.h> void f (int n) { static int s=0; s=s+1; printf("No.%d:s=%d\n",n,s); } void main() { int num; for(num=1;num<4;num++) f (num); } 程序运行结果: NO.1:s=1 NO.2:s=2 NO.3:s=3
静态变量的特点: 静态局部变量在整个程序运行期间固定占有存 储单元 静态局部变量和全局变量一样,只在编译时赋 初值一次,以后每次函数调用时使用上次函数 调用结束时的保留值。 静态局部变量定义时如不赋初值,系统编译时 会自动对数值型静态局部变量赋初值为0;对字 符型静态局部变量赋初值为空字符。 静态局部变量仅能为本函数使用,其他函数不 能使用和影响它们
静态变量的特点: ➢静态局部变量在整个程序运行期间固定占有存 储单元。 ➢静态局部变量和全局变量一样,只在编译时赋 初值一次,以后每次函数调用时使用上次函数 调用结束时的保留值。 ➢静态局部变量定义时如不赋初值,系统编译时 会自动对数值型静态局部变量赋初值为0;对字 符型静态局部变量赋初值为空字符。 ➢静态局部变量仅能为本函数使用,其他函数不 能使用和影响它们
自动变量和静态局部变量区别: >自动变量的值在函数调用结束后不再保留, 下次调用不能使用已有的值。 静态局部变量在函数调用结束后,仍然保留 上次调用结束的值
自动变量和静态局部变量区别: ➢ 自动变量的值在函数调用结束后不再保留, 下次调用不能使用已有的值。 ➢ 静态局部变量在函数调用结束后,仍然保留 上次调用结束的值