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

news2024/10/6 22:26:16

   🔗 【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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/816890.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

40k的offer拿到手!爽歪歪~

据说周一和就业喜报更配&#xff1f;快跟着我一起来看看2023上半年黑马软件测试学科的就业喜报&#xff1a; 从黑马软件测试学科的就业中&#xff0c;我们也能看到软件测试对于企业的重要性&#xff0c;一点也不比程序员差&#xff0c;他们拿到的薪资也能和程序员的高薪媲美&am…

Netty 执行了多次channelReadComplete()却没有执行ChannelRead()

[TOC](Netty 执行了多次channelReadComplete()) Survive by day and develop by night. talk for import biz , show your perfect code,full busy&#xff0c;skip hardness,make a better result,wait for change,challenge Survive. happy for hardess to solve denpendies.…

JAVA的回调机制、同步/异步调用

一、同步调用 同步调用是最基本的调用方式。类A的a()方法调用类B的b()方法&#xff0c;类A的方法需要等到B类的方法执行完成才会继续执行。如果B的方法长时间阻塞&#xff0c;就会导致A类方法无法正常执行下去。 二、异步调用 如果A调用B&#xff0c;B的执行时间比较长&#…

【Git系列】Git概述

&#x1f433;Git概述 &#x1f9ca;1. Git发展历史&#x1f9ca; 2. Git与SVN的区别&#x1f9ca;3. Git本地结构&#x1f9ca;4. 代码托管中心&#x1fa9f;4.1 代码托管中心是什么&#xff1f;&#x1fa9f;4.2 托管中心种类 &#x1f9ca;1. Git发展历史 Git的发展历史可以…

容灾独家技术揭秘:HyperBDR无主机数据同步技术

01、一对一单机热备-传统灾备方式 单机热备是一种备份解决方案&#xff0c;它使用两台服务器来确保高可用性&#xff0c;是市场上最为常见的灾备模式。 在单机热备中&#xff0c;一台主服务器和一台备用服务器保持同步&#xff0c;以确保在主服务器出现故障或宕机时可以立即切换…

【Unity】超简单特效 - 烟雾

前言&#xff1a; 各式各样的制造工坊常常会出现在任意类型的游戏中&#xff0c;铁匠铺、车间、工业建筑等等&#xff0c;那么如何快速且简单的实现一款可复用的烟雾特效呢&#xff0c;先在脑海中想象一下我们生活里常见的烟雾吧。 初步实现&#xff1a; 在经过简单的想象以后…

TensorFlow项目练手(三)——基于GRU股票走势预测任务

项目介绍 项目基于GRU算法通过20天的股票序列来预测第21天的数据&#xff0c;有些项目也可以用LSTM算法&#xff0c;两者主要差别如下&#xff1a; LSTM算法&#xff1a;目前使用最多的时间序列算法&#xff0c;是一种特殊的RNN&#xff08;循环神经网络&#xff09;&#xf…

JDK 8.x 微服务启动JVM参数调优实战

微服务启动JVM参数调优实战 1.1 配置JVM启动参数1.2 解释1.3 JVM参数优化思路1.3.1 调整堆内存大小1.3.2 年轻代大小1.3.3 Metaspace 大小1.3.4 栈大小1.3.5 垃圾回收器选择1.3.6 垃圾回收参数1.3.7 预分配内存 1.3.8 禁用 ResizePLAB2. 常用JVM参数 1.1 配置JVM启动参数 服务…

每日一题——重建二叉树

重建二叉树 题目描述 给定节点数为 n 的二叉树的前序遍历和中序遍历结果&#xff0c;请重建出该二叉树并返回它的头结点。 例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6}&#xff0c;则重建出如下图所示。 提示: 1.vin.length pre.length 2.pre 和…

颠倒二进制位,颠倒给定的 32 位无符号整数的二进制位。

题记&#xff1a; 颠倒给定的 32 位无符号整数的二进制位。 提示&#xff1a; 请注意&#xff0c;在某些语言&#xff08;如 Java&#xff09;中&#xff0c;没有无符号整数类型。在这种情况下&#xff0c;输入和输出都将被指定为有符号整数类型&#xff0c;并且不应影响您的…

ChatPaper全流程加速科研:论文阅读+润色+优缺点分析与改进建议+审稿回复

项目设计集合&#xff08;人工智能方向&#xff09;&#xff1a;助力新人快速实战掌握技能、自主完成项目设计升级&#xff0c;提升自身的硬实力&#xff08;不仅限NLP、知识图谱、计算机视觉等领域&#xff09;&#xff1a;汇总有意义的项目设计集合&#xff0c;助力新人快速实…

惊喜!1行Python代码,瞬间测你工作量,分享一个统计代码行数的神器

大家好&#xff0c;这里是程序员晚枫。 **你想不想知道一个项目中&#xff0c;自己写了多少行代码&#xff1f;**我用今天的工具统计了一下开源项目&#xff1a;python-office的代码行数&#xff0c;竟然有21w行&#xff01; 我们一起看一下怎么用最简单的方法&#xff0c;统…

《吐血整理》进阶系列教程-拿捏Fiddler抓包教程(16)-Fiddler如何充当第三者再识AutoResponder标签-上

1.简介 Fiddler充当第三者&#xff0c;主要是通过AutoResponder标签在客户端和服务端之间&#xff0c;Fiddler抓包&#xff0c;然后改包&#xff0c;最后发送。AutoResponder这个功能可以算的上是Fiddler最实用的功能&#xff0c;可以让我们修改服务器端返回的数据&#xff0c…

Windows10系统还原操作

哈喽&#xff0c;大家好&#xff0c;我是雷工&#xff01; 复制了下虚拟机的Win10系统&#xff0c;但其中有一些软件&#xff0c;想实现类似手机的格式化出厂操作&#xff0c;下面记录Windows10系统的还原操作。 一、系统环境&#xff1a; 虚拟机内的Windows10&#xff0c;64…

JavaWeb第三章:JavaScript的全面知识

目录 前言 一.JavaScript的简介 &#x1f496;概念 &#x1f496;学习内容 二.JavaScript的引入方式 &#x1f496;内部脚本 &#x1f496;外部脚本 三.JavaScript的基础语法 &#x1f496;语法的书写 &#x1f496;变量 ✨ 全局变量 ✨局部变量 ✨常量 &a…

vue表单筛选

目录 筛选 HTML scss* filterComp 排序 表格 自定义数据样式 inner-table 分页 删除 default-modal 自定义元素的插槽-占位符 .search-wrap {height: 60px;display: flex;align-items: center;overflow: hidden;padding: 0 20px;.selected-options-wrap {flex: 1;.…

PostgreSQL数据库中,查询时提示表不存在的解决办法

最近遇到一个奇怪的问题&#xff0c;以前从来没有遇到过&#xff0c;在postgres SCHEMA下执行select * from table1语句时&#xff0c;提示表不存在&#xff0c;而实际这个表确是存在的&#xff0c;只不过是在public SCHEMA下。在public SCHEMA下执行这个sql语句是没有问题的。…

主成分分析PCA算法

Principal Components Analysis 这个协方差矩阵是一个nXn的&#xff0c;且是对称矩阵&#xff0c;就会有n个特征值λ和特征向量v&#xff0c;每个特征向量也是n维的。第一行特征向量v对应特征值λ1 。 D(yk)&#xff1a;表示主成分yk的方差。方差越大&#xff0c;说明携带的信…

如何在不使用脚本和插件的情况下手动删除 3Ds Max 中的病毒?

如何加快3D项目的渲染速度&#xff1f; 3D项目渲染慢、渲染卡顿、渲染崩溃&#xff0c;本地硬件配置不够&#xff0c;想要加速渲染&#xff0c;在不增加额外的硬件成本投入的情况下&#xff0c;最好的解决方式是使用渲云云渲染&#xff0c;在云端批量渲染&#xff0c;批量出结…

【迁移】Mysql数据库备份 迁移

【迁移】Mysql数据库备份 迁移 &#x1f4d4; 千寻简笔记介绍 千寻简笔记已开源&#xff0c;Gitee与GitHub搜索chihiro-notes&#xff0c;包含笔记源文件.md&#xff0c;以及PDF版本方便阅读&#xff0c;且是用了精美主题&#xff0c;阅读体验更佳&#xff0c;如果文章对你有…