第14章变量的存储类别及 内部、外部函数 变量的存储类型 自动变量 2、静态变量 3、寄存器变量 4、外部变量 二、内部函数和外部函数 内部函数 2、外部函数
第14章 变量的存储类别 及 内部、外部函数 一、变量的存储类型 1、自动变量 2、 静态变量 3、 寄存器变量 4、 外部变量 二、内部函数和外部函数 1、 内部函数 2、 外部函数
变量的存储类型 对变量的定义需要给出两方面的属性: 数据类型:指变量的名称、类型、取值范围和占据 存贮空间的大小。如整型,实型,字符型等。 存储类别:变量存在的时间(生存期)、作用范围 和在硬件中存放的地点(区域) 变量定义的一般形式为: 存储类别数据类型变量名;
对变量的定义需要给出两方面的属性: 指变量的名称、类型、取值范围和占据 存贮空间的大小。如 整型,实型,字符型等。 变量存在的时间(生存期)、作用范围 和在硬件中存放的地点(区域)。 数据类型: 存储类别: 存储类别 数据类型 变量名; 变量定义的一般形式为: 一、变量的存储类型
内存中供用户使用的空间有三部分: 程序区 存放程序的可执行代码。 用户区 静态存储区存放全局变量和静态局部变量 动态存储区存放函数调用时调用函数的现场保
内存中供用户使用的空间有三部分: 用 户 区 程序区 静态存储区 动态存储区 存放程序的可执行代码。 存放全局变量和静态局部变量。 存放函数调用时调用函数的现场保 护、自动局部变量和函数形参
自动变量 用关键字auto作存储类型说明的局部变量(包 括形参)称为自动变量 自动变量存放在动态存储区,都是动态分配存 储空间的。 C语言规定:在局部变量的定义中,可省略关 键字auto。即:没有指明存储类别的变量,一律隐 含为:自动变量。 例:main( int hanshu( auto int a f x, y; i auto int b, C, d
1、 自动变量 用关键字auto作存储类型说明的局部变量(包 括形参)称为自动变量。 自动变量存放在动态存储区,都是动态分配存 储空间的。 C语言规定:在局部变量的定义中,可省略关 键字auto。即:没有指明存储类别的变量,一律隐 含为:自动变量。 例:main( ) { int x , y; ······ } int hanshu( auto int a ) { auto int b, c, d; ······ }
例自动变量的特点示例。 #include 程序运行结果: void f (int n) NO.1:s=1 NO.2: S=1 auto int s=0;/auto可以省略* NO.3:s=1 printf("No%od: S=%dn", n, S) void maino int num; for(num=l; num<4; num++) f(num)
例 自动变量的特点示例。 #include void f (int n) { auto int s=0; /*auto可以省略*/ 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=1 NO.3:s=1
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 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 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;对字 符型静态局部变量赋初值为空字符。 ➢静态局部变量仅能为本函数使用,其他函数不 能使用和影响它们
自动变量和静态局部变量区别: >自动变量的值在函数调用结束后不再保留, 下次调用不能使用已有的值。 静态局部变量在函数调用结束后,仍然保留 上次调用结束的值
自动变量和静态局部变量区别: ➢ 自动变量的值在函数调用结束后不再保留, 下次调用不能使用已有的值。 ➢ 静态局部变量在函数调用结束后,仍然保留 上次调用结束的值