C 语言四大存储类型。。。
来源:互联网 发布:plc编程软件通用版 编辑:程序博客网 时间:2024/04/29 23:13
1。 extern, 从其英文意思外部的就能看出,这个表示引用一个外部变量。。
C语言程序编译时是以每个.c 文件为单位的,最后再把它们链接在一起,所以每个文件中的全局变量对于其他文件是可见的,所以可以在一个文件中引用其他文件中的变量和函数。
extern 关键字就是用来表示引用别的单元的变量。。。
比如。。file1.c 中
int main()
{
extern int c ; //引用外部变量。。。
exten int sum(int a, int b);
scanf("%d",&c);
printf("%d ",c);
}
在 file2.c中
int c ;
====================================================================================
所以 file1.c可以用其他变量。。
如果 file2.c 中并没有定义变量c ,那么此用法将是错误的。。
同理,函数也可以用此方式。。
如果外部文件中的全局变量定义为 static ,则也不能extern操作。
2 。。 static
上文提到了static
static 有两重功能, 第一是修饰全局变量,和函数,这样的效果是其他文件不能引用static修饰了的变量和函数。
比如:
file1.c
int main()
{
extern int a ; // 引用错误
extern int sum(int ,int ) // 错误。。
.....
}
file2.c
static int a;
static int sum(int a, int b);
因此。。
static 的第一个功能是当其修饰全部变量和函数时,能限定变量和函数的作用域在此文件,而不被其他文件所见。
第二。 当static 修饰局部变量时。。
众所周知,函数中局部变量是自动分配在栈中的,当函数结束时会自动销毁栈中的数据。。
如果用static 修饰时:
int fun( )
{
static int count = 0;
return count ++;
}
int main()
{
int i;
for (i = 0; i<10 ; i++)
fun();
}
由于 fun()中的 count 为static修饰。 所以它被分配在内存中的静态存储区, 而不是栈中, 因此它的生命周期伴随着整个程序而不是函数,它不会随着函数的结束而销毁, 但是在函数外部也不能引用它,只能在每次进入函数后操作。
每次for 循环时,count 会 自加1 。。。
静态局部变量只初始化一次,如果没有初始化,那么会自动初始化为0 。。
因为内存中的静态存储区会被自动初始化为 0;
因此可以 static char str[100] ;
这时str 被初始化为0,而不用去手动初始化,这也是一种方法。。
static 和 auto 变量是不同的。
3 。 auto 变量
C语言中默认的数据存储类型都是auto 变量,即自由变量,它在定义的位置被自动任意分配到内存中 ,所以当到它的作用域之外时,会自动被OS 销毁。。
注意: 全部变量不是auto 型,它是在静态存储区的。。
一个变量不能同时用 static 和 auto 修饰,比如 static auto int a ;
这样定义是相互矛盾的。。
所以 对于 auto 变量, 必须在使用时初始化, 或者赋给值,否则它的值是无效值。
4 register
rigister 为寄存器变量, 由于某些数据CPU 要经常读取,为了读取快捷,编译器会把这些数据放寄存器中,而不放在内存中,这样CPU 便可以直接从其寄存器中读取数据。。
但是 寄存器的数量毕竟有限,并不是所有定义的register变量都存储在寄存器中 。。
register 变量的数据类型必须符合cpu寄存器支持的数据类型 ,一般为整型和浮点型,现在的CPU寄存器也基本支持浮点型。
register 变量的数据长度必须小于等于寄存器所支持的最大数据长度。
register 变量有可能没有存储在内存中, 所以不要用& 取其地址。
现在的CPU 速度已足够运算了,所以register变量已经过时了 ,尽量不用。
- C 语言四大存储类型。。。
- C语言存储类型
- C语言存储类型
- C语言存储类型
- C语言存储类型
- c语言存储类型
- C语言存储类型
- C语言变量存储类型
- C语言--变量存储类型
- c语言数据存储类型
- 【C语言学习】存储类型
- C语言中的存储类型
- C语言变量存储类型
- C语言存储类型总结
- C语言的存储类型
- C语言存储类型理解
- C语言的存储类型
- c语言变量的存储类型
- java成员变量的初始化顺序
- Bears Memory Match app support info
- mini2440 裸机编程 -键盘中断
- 用GDB调试程序(二)
- s3c6410 uboot代码分析
- C 语言四大存储类型。。。
- caf文件头信息
- 用GDB调试程序(三)
- BPM系列:流程监控
- java版的模板语言
- 用GDB调试程序(四)
- ssh+json问题
- hdu_1.3.4_shǎ崽 OrOrOrOrz
- 用GDB调试程序(五)