C语言--变量存储类型
2011-01-05 14:32
295 查看
C语言的变量存储类型分为: 1 静态存储 分为外部变量(extern)和静态变量(static)。 (1) 静态变量
在变量定义时,就分配存储单元并一直保持不变,直至整个程序结束。
格式:
static 数据类型 变量名
静态变量在退出其作用域之后,依然保留其储存空间,即使所在函数调用结束也不释放,也就是说任何函数对静态变量直接起作用。
在定义时可以按下面的格式对静态变量进行初始化:
static 类型 变量名=常量;
例如:
static int a=1;
static char a[]=”This is a text”;
实例1 同名异值
静态变量在程序运行中会一直保留其存储空间,如果程序中定义过多的静态变量(尤其是静态数组),则有可能会引起内存空间不足。
(2) 外部变量
外部变量是在函数外部定义的变量,即全局变量,如果需要在多个程序之间进行变量的引用,就需要外部变量。
外部变量的格式说明如下:
extern 数据类型 变量名;
说明:外部变量仅能定义一次,即只能分配一次存储空间,如果重复定义变量,则程序编译时会报错。
tc1.c和tc2.c是2个不同的程序文件,但它们都使用同一个变量a,变量a被定义为外部变量,在文件tc1.c中被定义,而在文件tc2.c中只是说明a是外部变量。
使用关键字extern扩展变量作用域:
在上面的程序段中,外部变量a是在main()函数之后进行定义的,如果要在main()中进行调用,则需要在main()中使用语句
"extern int a" 说明a是一个外部变量,否则如果使用"int a",那么得到的只是一个局部变量。
2 动态存储
分为自动变量(auto)和寄存器变量(register)。
(1) 动态变量(自动变量auto)
在程序执行过程中,需要使用才给它分配存储单元,使用完后立即释放。
动态变量的定义格式如下:
auto 数据类型 变量名; /*关键字auto可以省略*/
平时我们见到的形参以及块内变量都是动态变量。
(2) 寄存器变量
变量的值都是存储在内存中的,有些变量可能会大量使用(例如for中的循环变量),为了提高执行效率,C语言允许将变量的值存放到CPU的寄存器中,叫做寄存器变量。
寄存器变量定义格式如下:
register 数据类型 变量名;
只有局部变量才能定义成寄存器变量,寄存器变量能够定义的数量有限,一般以2,3个为宜,
由于寄存器变量不在内存中,因此不能进行地址运算,最好是使用时定义寄存器变量,使用完后立刻释放。
在变量定义时,就分配存储单元并一直保持不变,直至整个程序结束。
格式:
static 数据类型 变量名
静态变量在退出其作用域之后,依然保留其储存空间,即使所在函数调用结束也不释放,也就是说任何函数对静态变量直接起作用。
在定义时可以按下面的格式对静态变量进行初始化:
static 类型 变量名=常量;
例如:
static int a=1;
static char a[]=”This is a text”;
实例1 同名异值
/*同名异值*/ #include <stdio.h> int f(); main(){ int a,s; /*此处定义的s是一个函数级局部变量*/ printf(" 同名异值/n/n"); s=100; printf("在函数main()中,执行循环语句前,s=%d/n",s); for(a=1;a<5;a++){ static int s=10; /*此处定义的s是一个语句级静态变量*/ printf("在函数main()中,第%d次循环时,s=%d/n",a,s); } }
静态变量在程序运行中会一直保留其存储空间,如果程序中定义过多的静态变量(尤其是静态数组),则有可能会引起内存空间不足。
(2) 外部变量
外部变量是在函数外部定义的变量,即全局变量,如果需要在多个程序之间进行变量的引用,就需要外部变量。
外部变量的格式说明如下:
extern 数据类型 变量名;
说明:外部变量仅能定义一次,即只能分配一次存储空间,如果重复定义变量,则程序编译时会报错。
/*文件tc1.c*/ int a; /*定义外部变量a*/ int f(); main(){ ... a=1; /*调用外部变量a*/ m=f(); } /*文件tc2.c*/ extern int a; /*说明a为外部变量*/ f(){ ... a++; ... }
tc1.c和tc2.c是2个不同的程序文件,但它们都使用同一个变量a,变量a被定义为外部变量,在文件tc1.c中被定义,而在文件tc2.c中只是说明a是外部变量。
使用关键字extern扩展变量作用域:
int f(); main(){ extern int a; /*说明外部变量a*/ ... a=1; /*调用外部变量*/ m=f(); } int a; /*定义外部变量a*/ int f(){ ... a++; /*调用外部变量*/ ... }
在上面的程序段中,外部变量a是在main()函数之后进行定义的,如果要在main()中进行调用,则需要在main()中使用语句
"extern int a" 说明a是一个外部变量,否则如果使用"int a",那么得到的只是一个局部变量。
2 动态存储
分为自动变量(auto)和寄存器变量(register)。
(1) 动态变量(自动变量auto)
在程序执行过程中,需要使用才给它分配存储单元,使用完后立即释放。
动态变量的定义格式如下:
auto 数据类型 变量名; /*关键字auto可以省略*/
平时我们见到的形参以及块内变量都是动态变量。
(2) 寄存器变量
变量的值都是存储在内存中的,有些变量可能会大量使用(例如for中的循环变量),为了提高执行效率,C语言允许将变量的值存放到CPU的寄存器中,叫做寄存器变量。
寄存器变量定义格式如下:
register 数据类型 变量名;
main(){ int a; register int i; for(i=1;i<1000;i++){ a+=i; } printf("%d",a); }
只有局部变量才能定义成寄存器变量,寄存器变量能够定义的数量有限,一般以2,3个为宜,
由于寄存器变量不在内存中,因此不能进行地址运算,最好是使用时定义寄存器变量,使用完后立刻释放。
相关文章推荐
- C语言之变量类型和存储方式
- 【精】C语言之变量存储类型
- C语言变量的类型和存储位置
- C语言中变量的作用域与存储类型
- C语言之变量类型和存储方式
- c语言变量的存储种类和存储器类型 (转载)
- C语言变量存储类型
- C语言变量的类型和存储位置
- C语言变量类型和存储分配
- 从内存理解c语言中变量的存储类型
- C语言中的变量的存储类型
- C语言的变量存储类型
- 从内存理解c语言中变量的存储类型
- C语言支持的四种变量存储类型
- C语言变量的存储类型
- C语言变量存储类型auto,static,extern,static extern,register
- IT之路-C语言中五大内存区及变量的存储类型、简单shell脚本(上).ZCSDN-2017.7.18
- C语言中变量的存储类型
- 【精】C语言之变量存储类型
- C语言:自己动手查看float以及double类型的变量2.5在内存中的存储方式。