C语言中对变量的说明包括两方面的内容:变量类型以及变量的存储类型。变量类型如:int(整形),char(字符型)是用来说明变量所占用的内存空间的大小。变量存储类型用来说明变量的作用范围。 C语言的变量存储类有:自动类、寄存器类、静态类和外部类。 关键字auto加在变量名及其类型前,用来说明它是自动变量。局部变量是指在函数内部说明的变量(有时也称为自动变量)。用关键字auto进 行说明, 当auto省略时, 所有的非全程变量都被认为是局部变量, 所以auto实际上 从来不用。 局部变量在函数调用时自动产生, 但不会自动初始化, 随函数调用的结束, 这个变量也就自动消失了, 下次调用此函数时再自动产生, 还要再赋值, 退出时又自动消失。 static称为静态变量。根据变量的类型可以分为静态局部变量和静态全程变量。 1. 静态局部变量 它与局部变量的区别在于: 在函数退出时, 这个变量始终存在, 但不能被其它 函数使用, 当再次进入该函数时, 将保存上次的结果。其它与局部变量一样。 2. 静态全程变量 静态 全程变量就是指只在定义它的源文件中可见而在其它源文件中不可见的变量。它与 全程变量的区别是: 全程变量可以再说明为外部变量(extern), 被其它源文件使用,而静态全程变量却不能再被说明为外部的, 即只能被所在的源文件使用。 extern称为外部变量。为了使变量除了在定义它的源文件中可以使用外, 还要 被其它文件使用。因此, 必须将全程变量通知每一个程序模块文件, 此时可用 extern来说明。 寄存器变量to能够长在执行速度很重要的情况下使用。其思想是告诉编译程序把该变量放在一个CPU寄存器中。因为数据在寄存器中操作比在内存中快,这样就提高了程序代码的执行速度。寄存器变量的说明是在变量名及类型之前加上关键字register。值得注意的是取地址运算符&不能作用于寄存器变量。//file1.c #include <stdlib.h> #include <stdio.h> int reset(); int next(); int last(); int sum(int ); int i=1; void main() { auto int i,j; i=reset(); for(j=1;j<=3;j++) { printf("i=%d\tj=%d\n",i,j); printf("next(i)=%d\n",next()); printf("last(i)=%d\n",last()); printf("sum(i+j)=%d\n",sum(i+j)); } } file2.c文件 static int i=10; int next() { return(i+=1); } int last() { return(i-=1); } int sum(int i) { static int j=5; return(i=j+=i); } file3.c文件 extern int i; reset() { return(i); } 运行结果: i=1 j=1 next(i)=11 last(i)=10 sum(i+j)=7 i=1 j=2 next(i)=11 last(i)=10 sum(i+j)=10 i=1 j=3 next(i)=11 last(i)=10 sum(i+j)=14
C语言学习之变量存储
最新推荐文章于 2021-05-17 10:19:09 发布