C语言中变量的作用域与存储类型
来源:互联网 发布:python语言就业前景 编辑:程序博客网 时间:2024/06/10 03:52
1. 全局变量与局部变量
任何函数或变量均只能定义一次,可声明多次。定义在代码块之内(函数块内)的变量为局部变量,定义在函数外部的变量为全局变量,作用范围是整个项目(不单单是本文件),因此也不能在其它文件中再次定义同名变量,函数也是如此。
2. extern的用法
想使用其它源文件中定义的函数或全局变量,只需在本文件中添加声明语句即可。例如extern intvar_name;extern不是必需,但加上更规范。若在代码块内使用其它文件的全局变量,则必需用extern(不然变成了新建一个局部变量),且作用域是该代码块。
3. static的用法
如果在定义函数或全局变量的时候用了static,则把函数或全局变量的作用域由整个项目限定为本文件,其它文件将无法使用该函数或变量。
4. 变量的存储位置
局部变量存储在内存堆栈,随着代码块的调用动态创建与释放;全局变量与函数均存储在静态内存中,在程序运行期间一直存在。若局部变量前用static声明,则存储位置由堆栈变为静态内存,但作用域仍然是局部的。全局变量前加上static的作用只是把作用域由整个项目限制为本文件,其它不变。
示例程序:
voidmain(){
fun();
fun();
}
voidfun(){
inta=10;
static int b =20;
a++;
b++;
printf("a=%db=%d\n",a,b);
}
运行结果为:
a=11 b=21
a=11 b=22
请按任意键继续. . .
5. 静态变量与自动变量
由上述程序可以看出,static变量的值是一直存在的,且定义并初始化的语句只在最初执行依次,之后再遇到将会忽略。另外,对于局部变量声明为static,因为作用域仍是局部,因此可在其它代码块内声明相同名字的static变量,两个局部的static变量都存储在静态内存且具有相同的变量名,但彼此没有关系。
6. 变量的初始化
a) 静态变量的初始化只进行一次,且是在可执行文件载入内存时已经确定;而自动变量(即堆栈变量)的初始化是在运行时确定。
b) 如果没有显示初始化,静态变量默认初始化为0,自动变量与寄存器变量的默认初始值是垃圾(即分配的地址上值是多少就默认初始化多少,因此不可用)。
c) 静态变量的初始化语句必须是字面值常量,因此在运气前就必须要确定初始值。自动变量的初始化语句可为任何表达式。
d) int a =10 等价于int a; a=10; 只有风格之差,没有效率之别。
- C语言中变量的作用域与存储类型
- C/C+++的中变量作用域和存储类型
- C语言中变量的存储类型与初始化
- C中变量的存储类型及作用域
- C语言中变量的存储类型
- C语言中变量的存储类型
- C语言中变量的存储类型
- C语言入门教程 (十二) 变量的作用域和存储类型
- C语言入门(十四)变量的作用域和存储类型
- C语言入门教程22-变量类型与作用域
- C语言中变量存储和作用域
- C语言中变量的作用域
- C语言中变量的作用域
- C语言中变量的作用域
- C语言中变量的作用域
- C语言中变量的作用域
- C语言中变量的作用域 .
- C语言中变量的作用域
- [项目管理]_[初级]_[TortoiseSVN的使用入门]
- Android对ScrollView滚动监听,实现美团、大众点评的购买悬浮效果
- 信用卡号验证
- 蓝牙打印机使用范例
- 第十二周项目三 用递归方法求解(返回第n个Fibnacci数)
- C语言中变量的作用域与存储类型
- 用二叉树实现表达式中缀式变后缀式并求值
- 身份证号码验证
- C/C++中的内存分配机制
- duilib中的V和H布局中滚动条问题
- UVA 10714
- 手把手教你用matlab生成STM32官方IIR滤波器的系数(三)
- UVA10128 - Queue(dp)
- BZOJ 1251 序列终结者 Splay