Linux C/C++基础——变量作用域
2024-09-04 09:30:28
1.局部变量
局部变量也叫auto自动变量(auto可写可不写),一般情况下代码块{}内部定义的变量都是自动变量,它有如下特点:
- 只有当执行到这句语句时,系统才为这个变量分配空间
- 在一个函数内定义,只在函数范围内有效
- 随着函数调用的结束或复合语句的结束局部变量的声明声明周期也结束
- 复合语句中定义,只在复合语句中有效
- 如果没有赋初值,内容为随机
- 不同的{}中,变量的名字可以一样,可以把{}比作房子,不同的房子中可以有同名的小伙伴
#include <stdio.h> void test()
{
//auto写不写是一样的
//auto只能出现在{}内部
auto int b = ;
} int main(void)
{
//b = 100; //err, 在main作用域中没有b if ()
{
//在复合语句中定义,只在复合语句中有效
int a = ;
printf("a = %d\n", a);
} //a = 10; //err离开if()的复合语句,a已经不存在 return ;
}
2.静态局部变量
在局部变量前面加上static关键字
- static局部变量的作用域也是在定义的函数内有效
- static局部变量的生命周期和程序运行周期一样,同时staitc局部变量的值只初始化一次,但可以赋值多次
- static局部变量若未赋以初值,则由系统自动赋值:数值型变量自动赋初值0,字符型变量赋空字符
- static局部变量,在编译期间就已经分配空间,函数没有调用前就已经存在
- 只能用常量初始化
#include <stdio.h> void fun1()
{
//调用完自动释放
int b = ;
b++;
printf("b = %d\n", b);
} void fun2()
{
//静态局部变量,没有赋值,系统赋值为0,而且只会初始化一次
static int a;
a++;
printf("a = %d\n", a);
} int main()
{
fun1();
fun1();
fun2();
fun2(); return ;
}
静态局部变量在初始化后没有释放,所以第二次调用函数,在原来的基础上操作
如果在函数中有多个形参,形参的创建顺序从右向左
3.全局变量
在函数外定义,可被本文件及其它文件中的函数所共用,若其它文件中的函数调用此变量,须用extern声明
全局变量的生命周期和程序运行周期一样,在编译阶段已经分配空间(函数没有执行前)
不同文件的全局变量不可重名
- 只能定义一次,可以声明多次
4.全局静态变量
- 在函数外定义,作用范围被限制在所定义的文件中
不同文件静态全局变量可以重名,但作用域不冲突
static全局变量的生命周期和程序运行周期一样,同时staitc全局变量的值只初始化一次,默认值为0
最新文章
- java8中CAS的增强
- JavaScript基础学习篇
- atitit. applet 浏览器插件 控件 的环境,开发,提示总结o9o
- php的字符串处理
- PostgreSQL的 initdb 源代码分析之八
- Android开发之bug-No Activity found to handle Intent
- android中相关的图形类
- android Button隐藏
- SSH-KeyGen 的用法 【转载】
- 利用golang语法检查对象是否实现了接口
- asp.net mvc4 easyui datagrid 增删改查分页 导出 先上传后导入 NPOI批量导入 导出EXCEL
- linux创建SVN客户端,服务器
- Spring mybatis源码篇章-SqlSessionFactoryBean
- [2012-06-18]awk利用关联数组合并记录
- QT中几个函数的使用方法
- oracle学习(一)
- Python excel 奇怪的通信规则
- Flink 集群运行原理兼部署及Yarn运行模式深入剖析
- Eclipse 在线安装properties编辑插件
- C++高质量编程笔记