看表情包学C语言 ——局部优先原则

🔗 【C语言趣味教程】专栏介绍👈 猛戳了解!!!


Ⅰ. 作用域(Scope)

0x00 引入:什么是作用域?

变量和常量在程序中都是有作用范围的,这个范围我们称之为变量的 作用域(scope) 。

作用域也称为 "定义域",是程序中 定义的变量所存在的区域,出了该区域变量就不能被访问。

变量的作用域又可以分为全局作用域局部作用域

0x01 局部变量

在函数内部声明或定义的变量称为 局部变量 (local variable) 。

局部变量的作用域仅在该函数的内部(在大括号内部),出了函数(大括号外)就无效:

cpp 复制代码
#include <stdio.h>

int main(void)
{
    int a = 20;   // 局部变量

    return 0;
}

0x02 全局变量

在函数内部声明或定义的变量称之为 全局变量 (global variable) 。

全局变量的作用域在整个工程,全局变量定义在函数外,我们通常将其定义在程序的顶部:

cpp 复制代码
#include <stdio.h>

int global_A = 10;       // 全局变量

int main(void)
{
    printf("Hello,World!\n");

    return 0;
}

这样,我们就定义了全局变量 global_A,它的生命周期是整个程序的生命周期。

我们可以在任意的函数内部访问到这个 global_A,因为它具有全局性。

因此,全局变量在声明后可作用于整个程序。

❓ 如何快速分辨全局变量和局部变量?最简单的方法就是看大括号!

  • 大括号外部定义的变量叫做 全局变量
  • 大括号内部定义的变量叫做 局部变量

0x02 局部变量优先原则

当局部变量和全局变量的名字相同时,局部变量优先。

**💬 代码演示:**局部变量优先

cpp 复制代码
#include <stdio.h>

int var = 100;     // 全局变量

int main(void)
{
    int var = 10;  // 局部变量
    printf("%d\n", var);

    return 0;
}

🚩 运行结果如下:

0x03 利用大括号限制变量作用域

使用大括号可以限制一个变量的作用域,在大括号内的变量就是局部变量。

其作用范围仅仅在这个打括号内,出了这个大括号就无效。

**💬 代码演示:**使用大括号限制变量的作用域

cpp 复制代码
#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 局部变量的生命周期

局部变量的生命周期简单来说,就是出了 "大括号" 就失效。

**💬 代码演示:**局部变量的生命周期

cpp 复制代码
#include <stdio.h>

int main(void)
{
    {
        int a = 10;
        printf("%d\n", a);
    }   

    printf("%d\n", a);  // 出了作用域了
}

🚩 运行结果:(报错)

0x02 全局变量的生命周期

而全局变量则不同,全局变量生命周期是整个程序,因此不用担心出了大括号用不了该变量。

我么可以在任意的函数内部能访问全局变量,当然,还是要遵循局部变量优先原则。

如果有同名的局部变量,还是会优先选定局部变量的:

cpp 复制代码
#include <stdio.h>

int A = 10;       // 全局变量

int main(void)
{
    printf("%d", A);   // 访问全局变量A

    return 0;
}

**🚩 运行结果:**10

cpp 复制代码
📌 [ 笔者 ]   王亦优 | 雷向明
📃 [ 更新 ]   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 |

相关推荐
_Kayo_26 分钟前
JS深拷贝 浅拷贝、CSS垂直水平居中
开发语言·前端·javascript
云天徽上31 分钟前
【数据可视化-87】2023-2024年中国各省人口变化深度分析与可视化:Python + pyecharts打造炫酷暗黑主题大屏
开发语言·python·信息可视化·数据可视化·pyecharts
404未精通的狗33 分钟前
(C++)继承全解析及运用
开发语言·c++
李永奉38 分钟前
C语言—数组和指针练习题合集(二)
c语言·开发语言
C4程序员1 小时前
北京JAVA基础面试30天打卡08
java·开发语言·面试
God-Hrh1 小时前
JVM运维
java·开发语言·jvm
qiuyunoqy1 小时前
蓝桥杯算法之搜索章 - 4
算法
weixin_448617052 小时前
疏老师-python训练营-Day43复习日
开发语言·python
Swaggy T2 小时前
自动驾驶决策算法 —— 有限状态机 FSM
linux·人工智能·算法·机器学习·自动驾驶
草莓熊Lotso2 小时前
【C语言强化训练16天】--从基础到进阶的蜕变之旅:Day2
c语言·经验分享·笔记·其他