C易错注意之分支循环,悬空else,短路表达式,static

接下来的日子会顺顺利利,万事胜意,生活明朗-----------林辞忧 

前言: 

c语言中一些关于分支循环中continue常混淆,悬空esle问题,短路表达式,static ,extern在使用时稍不注意就会出错的点,接下来我们将介绍这些易错的内容

一:深入理解分支语句

1.对于分支语句有很多结构

如if() else语句,if()    else if ()  esle if ()    else  语句,还有if语句中嵌套if  else 语句的,对于这些语句要注意使用时的条件是否合理

2.对比两种结构 if()  if()  和 if()  else if()  else 使用时的不同

3.举例:计算1~100之间出现的9的个数

对于上面两种计算方式,会发现会有差别,出现这种的原因为if() if()在运行时每个数都会执行,而对于if() else if() 在运行中只会选择运行一个,在99时只算了一个9,导致结果出错 ,所以使用需要注意这一点

二:悬空else问题

1.举例

2.结果分析 

运行得知,此程序执行结果为无,好像程序中是打印haha,但else只有一个,有两个if结构,此时就会出现匹配问题

3.悬空else处理规则

else总是与最近未匹配的if结构匹配

所以上面例子就是判断a==1时,条件不成立,因为无匹配的else结构,程序啥也不输出

三:短路表达式

1.&&逻辑与的短路(左为假,右不再执行)

int a=0,b=3,c=4;
a++&& b++ && c++;
printf("%d,%d,%d",a,b,c);

对于这个表达式,由于是a++,a先使用后++,所以a++的结果为0,此时逻辑与&& 发生短路,后面的b++,c++不再执行,所以结果为1,3,4 

2.||逻辑或的短路(左为真,右不再执行)

int a=1,b=2,c=3;
a++ || b++ ||c++;
printf("%d,%d,%d",a,b,c);

此程序的运行结果为2,2,3

四:三种循环结构中的break,continue语句 

1.break语句

break语句在三种循环结构中一致,都是用来终止程序的,跳出循环

2.while ,do while 语句与for语句中continue的不同

continue的作用是跳过本次循环后面的语句,直接到判断部分(while  do while)或者调整部分

会发现对于while循环跳过continue后面的语句,就会造成死循环,原因是当i==5时,continue跳过后面语句,直接到判断部分,导致i++未执行,i一直为5,造成死循环

五:static 和extern

1.static

static是静态的意思,可以修饰函数,局部变量,全局变量

2.作用于和生命周期

作⽤域(scope)是程序设计概念
,通常来说,⼀段程序代码中所⽤到的名字并不总是有效(可⽤)
的,⽽限定这个名字的可⽤性的代码范围就是这个名字的作⽤域。
1. 局部变量的作⽤域是变量所在的局部范围。
2. 全局变量的作⽤域是整个⼯程(项⽬)。
⽣命周期指的是变量的创建(申请内存)到变量的销毁(收回内存)之间的⼀个时间段。
1. 局部变量的⽣命周期是:进⼊作⽤域变量创建,⽣命周期开始,出作⽤域⽣命周期结束。
2. 全局变量的⽣命周期是:整个程序的⽣命周期。

3.static的作用

1.static修饰局部变量改变了变量的⽣命周期,⽣命周期改变的本质是改变了变量的存储类型,本
来⼀个局部变量是存储在内存的栈区的,但是被 static 修饰后存储到了静态区。存储在静态区的变
量和全局变量是⼀样的,⽣命周期就和程序的⽣命周期⼀样了,只有程序结束,变量才销毁,内存才 回收。但是作⽤域不变的。
2.⼀个全局变量被static修饰,使得这个全局变量只能在本源⽂件内使⽤,不能在其他源⽂件内使⽤。
本质原因是全局变量默认是具有外部链接属性的,在外部的⽂件中想使⽤,只要适当的声明就可以使 ⽤;但是全局变量被 static 修饰之后,外部链接属性就变成了内部链接属性,只能在⾃⼰所在的源 ⽂件内部使⽤了,其他源⽂件,即使声明了,也是⽆法正常使⽤的

4.extern

extern 是⽤来声明外部符号的,如果⼀个全局的符号在A⽂件中定义的,在B⽂件中想使⽤,就可以使
extern 进⾏声明,然后使⽤。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

数据结构:排序

排序的概念 1.概念 就我当前所认识的排序来说。排序是把一串相同类型的数据,按照升序或者降序排列起来的操作。 以下介绍的排序大多可以排列不限于整型和文件,但也有一些算法有较明显的局限性。 2.稳定性 如果在排列之前,一组数据中&…

Airtable、pyairtable

文章目录 一、关于 AirtableAirtable 公司历史诞生发展 产品方向产品层级国内模仿者竞争对手关于 API Key价格 二、关于 pyairtable安装快速使用 一、关于 Airtable 官网:https://www.airtable.comgithub : https://github.com/AirtableAirtable AI : h…

搜索最短路/最小步数问题

文章目录 搜索专题之最短路/最小步数迷宫问题【题目描述】【输入样例】【输出样例】【AC代码】 武士风度的牛【题目描述】【AC代码】 抓住那头牛【题目描述】【AC代码】 魔板【题目描述】【AC代码】 搜索专题之最短路/最小步数 迷宫问题 【题目描述】 【输入样例】 5 0 1 0 …

【Clang+LLVM+honggfuzz学习】(一)LLVM简介、安装和第一个Hello Pass

本文结构,PS:根据需要选择观看哦 1. 前言参考 2.简介传统编译器架构LLVM架构 3. LLVM安装版本准备官网源码下载git下载安装过程 4. 写一个LLVM Pass旧Hello Pass实现(legacy PM version)新Hello Pass实现(Using the New Pass Mana…

GPT4不限制使用次数了!GPT5即将推出了!

今天登录到ChatGPT Plus账户,出现了如下提示: 已经没有了数量和时间限制的提示。 更改前:每 3 小时限制 40 次(团队计划为 100 次);更改后:可能会应用使用限制。 GPT-4放开限制 身边订阅了Ch…

【C++STL详解 —— vector的介绍及使用】

【CSTL详解 —— vector的介绍及使用】 vector的介绍vector的使用vector的构造vector iterator 的使用begin和endrbegin和rend vector 空间增长问题size和capacityreserve和resizeempty vector 增删查改push_back和pop_backinsert和erasefindswap元素访问 vector 迭代器失效问题…

Vue 如何快速上手

目录 1. Vue 是什么 (概念) 1.1. Vue 的两种使用方式 1.2. 优点 1.3. 缺点 2. 创建 Vue 实例,初始化渲染 2.1. 步骤(核心步骤 4步) 2.2. 练习——创建一个Vue实例 3. 插值表达式 {{ }} 3.1. 介绍 3.2. 作用…

哈哈哈哈哈

欢迎使用Markdown编辑器 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。 222 我们对Markdown编辑器进行了一些功能拓展与语法支持,…

大创项目推荐 深度学习 python opencv 火焰检测识别

文章目录 0 前言1 基于YOLO的火焰检测与识别2 课题背景3 卷积神经网络3.1 卷积层3.2 池化层3.3 激活函数:3.4 全连接层3.5 使用tensorflow中keras模块实现卷积神经网络 4 YOLOV54.1 网络架构图4.2 输入端4.3 基准网络4.4 Neck网络4.5 Head输出层 5 数据集准备5.1 数…

文件管理--fscanf,fread,fwrite和fprintf

fprintf函数:对于fprintf函数,它和printf一样,但是它的表达式为:int fprintf ( FILE * stream, const char * format, ... );和printf的很相似,但有不一样。它是格式化输出函数,代码为: #includ…

模拟退火遗传算法GASA-附MATLAB代码

模拟退火遗传算法(Simulated Annealing Genetic Algorithm,SAGA)结合了模拟退火算法(Simulated Annealing,SA)和遗传算法(Genetic Algorithm,GA)的优点,用于解…

数字化导师坚鹏:招商银行数字化转型的4次模式升级与5大关键举措

招商银行数字化转型的4次模式升级与5大关键举措 招商银行数字化转型取得了较大的成功,从目前的财务数据来看,招商银行在数字化转型领域已经成为国内最优秀的股份制银行。招商银行是如何取得数字化转型成功的?从招商银行数字化转型的4次模式升…

先进电气技术 —— 控制理论之控制与扰动的战争

一、与扰动的斗争催生控制理论 在控制理论中,可以说“Identification(辨识)”、“Observe(观测)”、“Estimate(估计)”和“Control(控制)”这四个核心概念都是为了“消…

Centos7安装Docker与Docker-compose【图文教程】

个人记录 查看一下系统是否已经安装了Docker yum list installed | grep docker如下图代表没有安装Docker 卸载已有Docker yum remove docker docker-common docker-selinux docker-engine切换目录 cd /etc/yum.repos.d/查看当前目录所有的镜像源 ll安装yum-util与devi…

动态规划刷题(算法竞赛、蓝桥杯)--摆花(线性DP)

1、题目链接&#xff1a;[NOIP2012 普及组] 摆花 - 洛谷 #include <bits/stdc.h> using namespace std; const int mod1e67; const int N110; int n,m; int a[N],f[N][N]; //f[n][m]表示前n种花摆m盆的方案数 int main(){scanf("%d %d",&n,&m);for(in…

基于 Docker 的 python grpc quickstart

工作之后一直使用的 RPC 框架是 Apache 的 thrift&#xff0c;现在发现 grpc 更流行&#xff0c;所以也要学习一下&#xff0c;先来简单的跑一下 demo。在本地安装运行也很方便&#xff0c;不过因为有了 docker&#xff0c;所以在 docker 里面安装运行隔离性更好&#xff0c;顺…

并发线程基础第八篇

目录 线程池 自定义线程池 步骤1&#xff1a;自定义拒绝策略接口 步骤2&#xff1a;自定义任务队列 步骤3&#xff1a;自定义线程池 步 骤 4&#xff1a;测 试 ThreadPoolExecutor 线程池状态 构造方法 工作方式 newFixedThreadPool newCachedThreadPool newSingleTh…

算法day30 回溯6

332 重新安排行程 给你一份航线列表 tickets &#xff0c;其中 tickets[i] [fromi, toi] 表示飞机出发和降落的机场地点。请你对该行程进行重新规划排序。 所有这些机票都属于一个从 JFK&#xff08;肯尼迪国际机场&#xff09;出发的先生&#xff0c;所以该行程必须从 JFK …

【网站项目】果蔬经营平台系统

&#x1f64a;作者简介&#xff1a;拥有多年开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0c;帮助大学选题。赠送开题报告模板&#xff…

红黑树的性质与操作:吸收红结点及其对树结构的影响

红黑树的性质与操作&#xff1a;吸收红结点及其对树结构的影响 1.红黑树的基本性质2.吸收红结点的过程2.1黑色结点的度2.2 叶结点深度 3.伪代码实现4. C语言代码实现5. 结论 红黑树作为一种高效的自平衡二叉搜索树&#xff0c;在计算机科学中扮演着重要的角色。它通过一系列复杂…