🔗 【C语言趣味教程】专栏介绍👈 猛戳了解!!!
Ⅰ. 作用域(Scope)
0x00 引入:什么是作用域?
变量和常量在程序中都是有作用范围的,这个范围我们称之为变量的 作用域 (scope) 。
作用域也称为 "定义域",是程序中 定义的变量所存在的区域,出了该区域变量就不能被访问。
变量的作用域又可以分为 全局作用域 和 局部作用域。
0x01 局部变量
在函数内部声明或定义的变量称为 局部变量 (local variable) 。
局部变量的作用域仅在该函数的内部(在大括号内部),出了函数(大括号外)就无效:
#include <stdio.h>
int main(void)
{
int a = 20; // 局部变量
return 0;
}
0x02 全局变量
在函数内部声明或定义的变量称之为 全局变量 (global variable) 。
全局变量的作用域在整个工程,全局变量定义在函数外,我们通常将其定义在程序的顶部:
#include <stdio.h>
int global_A = 10; // 全局变量
int main(void)
{
printf("Hello,World!\n");
return 0;
}
这样,我们就定义了全局变量 global_A,它的生命周期是整个程序的生命周期。
我们可以在任意的函数内部访问到这个 global_A,因为它具有全局性。
因此,全局变量在声明后可作用于整个程序。
❓ 如何快速分辨全局变量和局部变量?最简单的方法就是看大括号!
- 大括号外部定义的变量叫做 全局变量。
- 大括号内部定义的变量叫做 局部变量 。
0x02 局部变量优先原则
当局部变量和全局变量的名字相同时,局部变量优先。
💬 代码演示:局部变量优先
#include <stdio.h>
int var = 100; // 全局变量
int main(void)
{
int var = 10; // 局部变量
printf("%d\n", var);
return 0;
}
🚩 运行结果如下:
0x03 利用大括号限制变量作用域
使用大括号可以限制一个变量的作用域,在大括号内的变量就是局部变量。
其作用范围仅仅在这个打括号内,出了这个大括号就无效。
💬 代码演示:使用大括号限制变量的作用域
#include <stdio.h>
int main(void)
{
int a = 0;
{
int a = 10;
printf("大括号内 a 的值:%d\n", a);
}
printf("大括号外 a 的值:%d\n", a);
return 0;
}
🚩 运行结果如下:
这里仍然遵循局部变量优先原则,局部变量优先。
Ⅱ. 声明周期(Life Cycle)
0x00 引入:生命周期的概念
变量创建和销毁之间的时间段,称为 生命周期 (Life Cycle)。
全局变量的生命周期和局部变量的生命周期是不同的:
- 全局变量:整个程序的生命周期。
- 局部变量:进入作用于生命周期开始,出了作用域生命周期结束。
0x01 局部变量的生命周期
局部变量的生命周期简单来说,就是出了 "大括号" 就失效。
💬 代码演示:局部变量的生命周期
#include <stdio.h>
int main(void)
{
{
int a = 10;
printf("%d\n", a);
}
printf("%d\n", a); // 出了作用域了
}
🚩 运行结果:(报错)
0x02 全局变量的生命周期
而全局变量则不同,全局变量生命周期是整个程序,因此不用担心出了大括号用不了该变量。
我么可以在任意的函数内部能访问全局变量,当然,还是要遵循局部变量优先原则。
如果有同名的局部变量,还是会优先选定局部变量的:
#include <stdio.h>
int A = 10; // 全局变量
int main(void)
{
printf("%d", A); // 访问全局变量A
return 0;
}
🚩 运行结果:10
📌 [ 笔者 ] 王亦优 | 雷向明
📃 [ 更新 ] 2023.7.31
❌ [ 勘误 ] /* 暂无 */
📜 [ 声明 ] 由于作者水平有限,本文有错误和不准确之处在所难免,
本人也很想知道这些错误,恳望读者批评指正!
📜 参考文献: - C++reference[EB/OL]. []. http://www.cplusplus.com/reference/. - Microsoft. MSDN(Microsoft Developer Network)[EB/OL]. []. . - 百度百科[EB/OL]. []. https://baike.baidu.com/. - 维基百科[EB/OL]. []. https://zh.wikipedia.org/wiki/Wikipedia - R. Neapolitan, Foundations of Algorithms (5th ed.), Jones & Bartlett, 2015. - B. 比特科技. C/C++[EB/OL]. 2021[2021.8.31] - 林锐博士. 《高质量C/C++编程指南》[M]. 1.0. 电子工业, 2001.7.24. - 陈正冲. 《C语言深度解剖》[M]. 第三版. 北京航空航天大学出版社, 2019. - 侯捷. 《STL源码剖析》[M]. 华中科技大学出版社, 2002. - T. Cormen《算法导论》(第三版),麻省理工学院出版社,2009年。 - T. Roughgarden, Algorithms Illuminated, Part 1~3, Soundlikeyourself Publishing, 2018. - J. Kleinberg&E. Tardos, Algorithm Design, Addison Wesley, 2005. - R. Sedgewick&K. Wayne,《算法》(第四版),Addison-Wesley,2011 - S. Dasgupta,《算法》,McGraw-Hill教育出版社,2006。 - S. Baase&A. Van Gelder, Computer Algorithms: 设计与分析简介》,Addison Wesley,2000。 - E. Horowitz,《C语言中的数据结构基础》,计算机科学出版社,1993 - S. Skiena, The Algorithm Design Manual (2nd ed.), Springer, 2008. - A. Aho, J. Hopcroft, and J. Ullman, Design and Analysis of Algorithms, Addison-Wesley, 1974. - M. Weiss, Data Structure and Algorithm Analysis in C (2nd ed.), Pearson, 1997. - A. Levitin, Introduction to the Design and Analysis of Algorithms, Addison Wesley, 2003. - A. Aho, J. - E. Horowitz, S. Sahni and S. Rajasekaran, Computer Algorithms/C++, Computer Science Press, 1997. - R. Sedgewick, Algorithms in C: 第1-4部分(第三版),Addison-Wesley,1998 - R. Sedgewick,《C语言中的算法》。第5部分(第3版),Addison-Wesley,2002 |