看表情包学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 |

相关推荐
nbsaas-boot1 小时前
Java 正则表达式白皮书:语法详解、工程实践与常用表达式库
开发语言·python·mysql
岁忧1 小时前
(LeetCode 面试经典 150 题 ) 11. 盛最多水的容器 (贪心+双指针)
java·c++·算法·leetcode·面试·go
chao_7891 小时前
二分查找篇——搜索旋转排序数组【LeetCode】两次二分查找
开发语言·数据结构·python·算法·leetcode
风无雨1 小时前
GO 启动 简单服务
开发语言·后端·golang
斯普信专业组1 小时前
Go语言包管理完全指南:从基础到最佳实践
开发语言·后端·golang
秋说3 小时前
【PTA数据结构 | C语言版】一元多项式求导
c语言·数据结构·算法
Maybyy3 小时前
力扣61.旋转链表
算法·leetcode·链表
我是苏苏3 小时前
C#基础:Winform桌面开发中窗体之间的数据传递
开发语言·c#
斐波娜娜3 小时前
Maven详解
java·开发语言·maven
小码氓4 小时前
Java填充Word模板
java·开发语言·spring·word