网站首页 > 技术文章 正文
在程序中,如果要表示某个人的年龄,则可以使用int型变量来表示,如:int age = 0;在这个过程中,为了表示年龄我们定义了一个int型变量,可以而变量的定义是可以在函数的内部定义,也可以在块内部定义,还可以在函数的外部定义。由于变量定义的位置不同,因而具有不同的使用范围,超出这个使用范围该变量就不能被访问,即我们所说的作用域。
根据作用域的不同,将变量分为局部变量和全局变量。
局部变量与全局变量
1、普通局部变量
- 在一个函数内部定义,只在函数范围内有效;
- 在复合语句中定义,只在复合语句中有效;
- 随着函数调用的结束或复合语句的结束而消亡
这里定义的变量a位置在main函数内部,因此只能在main函数中使用,在main函数外部的其他函数中无法使用。
(1)这里定义了两次变量a,它们不会冲突?
- 不会冲突,因为他们的作用域不同,不同作用域的变量名称是可以重复的。变量a的第一次定义:int a = 100;是在main函数内部,其在main函数未结束或者未返回之前都是有效的;变量a的第二次定义,int a = 10;是在块(即大括号)中定义的,它只在大括号中有效,离开这个大括号变量a就会消亡。
(2)既然定义了两个变量a,如何区分两次使用printf打印的到底是哪个变量?
- 因为变量a=10;的作用域只在大括号内部,出了大括号它就完蛋了,所以第二次使用printf打印的当然是变量a=100;
- 很显然,变量a=100和变量a=10在大括号内都是有效的,那第一次打印的是哪个呢?这里遵循“就近原则”,即打印的是变量a=10。
2、普通全局变量
- 在函数外定义,可被本文件中其它函数所共用;
- 作用域:从定义变量的位置开始到文本结束;
- 生存周期:在程序运行的整个周期都存在;
- 若其它文件中的函数调用此变量,须用extern进行声明
说明:g为全局变量,其作用域为当前文件,因此在main函数中我们可以去使用它。
注:同一源文件中,允许全局变量和局部变量同名,在局部变量的作用域内,全局变量不起作用,就是说局部变量的值会覆盖全局变量的值,也就是上面提到的“就近原则”,看个例子:
静态局部变量与静态全局变量
静态变量在定义的时候与普通变量不同,静态变量定义时用static来修饰,如:static int num = 10;
1、静态局部变量
- 第一次进入函数调用变量时初始化,以后每次进入函数,此变量保持上一次的值,具有记忆特性;
- 作用域:本函数范围内;
- 生存周期:整个程序运行的周期。
从上面例子可以看出,普通局部变量与静态局部变量不同,静态局部变量具有“记忆性”。
2、静态全局变量
- 在函数外定义,作用范围被限制在所定义的文件内,在其他文件中即便是用extern来声明也不能被使用;
- 不同文件静态全局变量可以重名,但作用域不冲突;
- 生存周期:整个程序运行的周期。
注意事项:
- 虽然普通全局变量和静态全局变量的生命周期相同,但还是有区别的,比如,在多个.c源文件中,全局静态变量是定义该变量的源文件所独享的,即便是加extern修饰,其他源文件也是不能访问的,但普通全局变量却可以;
- 形参变量属于被调函数的局部变量,实参变量属于主调函数的局部变量;
- 允许在不同的函数中使用相同的变量名,它们代表不同的对象,分配不同的单元,互不干扰;
- 局部变量如不作说明,都是auto的,且auto可以省略;
- 局部变量也可以定义为register型,告诉系统对其分配地址时尽量将其分配在寄存器中,以提高访问速度;
- 尽量少使用全局变量,因为在程序执行整个过程中都占用资源,同时会破坏函数的封闭性;
- 同一源文件中,允许全局变量和局部变量同名,在局部变量的作用域内,全局变量不起作用;
- 静态局部变量如不赋初值,编译时系统会自动将其赋值(整形变量为0,指针为NULL);动态局部变量如不赋值,则为随机值。
接下来就该写写C中的宏定义及预编译命令了,想了解的小伙们可以关注。
猜你喜欢
- 2024-09-26 C语言存储类之内部链接的静态变量
- 2024-09-26 零基础学C语言——作用域(c语言:作用)
- 2024-09-26 C/C++关键字static作用解析(c++中static关键字)
- 2024-09-26 这个offer你吃定了!C++「面试真题」及基本知识点总结
- 2024-09-26 extern关键字详解(explain关键字)
- 2024-09-26 【python 基础篇 十四】python函数的作用域
- 2024-09-26 PHP入门读书笔记(三): 常量和变量
- 2024-09-26 静态变量使用场景?(静态变量使用场景)
- 2024-09-26 C语言static关键字的全面深入探讨
- 2024-09-26 Excel-VBA教程005,什么是变量,变量的类型、变量的作用域?
- 最近发表
- 标签列表
-
- cmd/c (90)
- c++中::是什么意思 (84)
- 标签用于 (71)
- 主键只能有一个吗 (77)
- c#console.writeline不显示 (95)
- pythoncase语句 (88)
- es6includes (74)
- sqlset (76)
- apt-getinstall-y (100)
- node_modules怎么生成 (87)
- chromepost (71)
- flexdirection (73)
- c++int转char (80)
- mysqlany_value (79)
- static函数和普通函数 (84)
- el-date-picker开始日期早于结束日期 (76)
- js判断是否是json字符串 (75)
- c语言min函数头文件 (77)
- asynccallback (87)
- localstorage.removeitem (74)
- vector线程安全吗 (70)
- java (73)
- js数组插入 (83)
- mac安装java (72)
- 无效的列索引 (74)