C++要点细细梳理——trivial:运算符优先级、switch、临时变量默认赋值等

1. 运算符优先级

在这里插入图片描述

在C语言中,运算符的优先级决定了在表达式中各个运算符的执行顺序。当一个表达式中有多个运算符时,优先级高的运算符会先被计算。如果两个运算符的优先级相同,那么它们的结合性(从左到右或从右到左)会决定它们的计算顺序。

以下是一些基本的C语言运算符优先级(从高到低):

  1. 后缀运算符:例如数组下标[]、函数调用()、成员访问.->、后缀递增++和后缀递减--

  2. 一元运算符:例如前缀递增++、前缀递减--、取地址&、解引用*、正负号+-、位非~、逻辑非!、类型转换(type)、大小操作符sizeof

  3. 乘法运算符*(乘法)、/(除法)、%(取模)。

  4. 加法运算符+(加法)、-(减法)。

  5. 位移运算符<<(左移)、>>(右移)。

  6. 关系运算符<(小于)、<=(小于等于)、>(大于)、>=(大于等于)。

  7. 相等运算符==(等于)、!=(不等于)。

  8. 位与运算符&

  9. 位异或运算符^

  10. 位或运算符|

  11. 逻辑与运算符&&

  12. 逻辑或运算符||

  13. 条件运算符? :

  14. 赋值运算符:例如=+=-=*=/=%=<<=>>=&=^=|=

  15. 逗号运算符,

当表达式中的运算符优先级相同时,它们会按照从左到右的顺序进行计算,除非运算符的结合性是从右到左(例如赋值运算符和条件运算符)。

例如,在表达式a = b + c * d中,乘法运算符*的优先级高于加法运算符+,所以c * d会先被计算,然后其结果再与b相加,最后赋值给a

了解运算符的优先级对于编写正确和易于理解的代码是非常重要的。如果需要改变默认的运算顺序,可以使用括号来明确指定优先级。

在这里插入图片描述

例题:

#include <iostream>

int main() {
	int i = 10;
	printf("%d", i %= 2 ? 1 : 2);
	return 0;
}

上述代码的输出为什么是0而不是2?

上述代码的输出是0而不是2,是因为在C++中,条件运算符(? :)的优先级高于赋值运算符(=)。

根据C++的运算符优先级规则,条件运算符的优先级高于赋值运算符。因此,在执行i %= 2 ? 1 : 2时,先进行条件运算符的判断,然后根据判断结果进行赋值操作。

具体来说,首先计算i %= 2,即i = i % 2,将i的值更新为10 % 2的结果,即0。然后,根据条件运算符的判断结果,如果条件为真(非零),则取第二个操作数的值,即2;如果条件为假(零),则取第三个操作数的值,即1。

由于i的值为0,满足条件运算符的条件(非零),所以最终的结果是2。但是,由于printf函数中的格式化字符串是"%d",它只会输出整数部分,而不会输出小数部分。因此,即使结果为2,输出仍然是0。

swtich括号内的数据只能是整型?

在C语言中,switch 语句括号内的表达式的结果必须是一个整数类型(包括 char,因为 char 在C语言中本质上是一种小的整数类型)。这意味着你不能直接使用浮点数、字符串或其他非整数类型的值作为 switch 语句的条件。

然而,你可以通过一些转换或技巧来使用非整数类型的值。例如,如果你有一个浮点数并且想基于它的整数部分进行切换,你可以将其转换为整数。对于字符串,你可以使用字符串的哈希值或某种形式的编码作为 switch 语句的条件。

但请注意,这样的做法可能会使代码变得复杂且难以维护,因此在实践中并不常见。对于非整数类型的值,通常更推荐使用 ifelse if 语句进行条件判断。

总结来说,虽然 switch 语句在C语言中主要用于整数类型的值,但通过一些技巧,你也可以间接地使用非整数类型的值。然而,这通常不是最佳实践,除非有特定的需求或理由。

c语言函数内部定义的临时变量有默认赋值吗?

在C语言中,如果你在函数内部定义了临时变量(也称为局部变量),那么这些变量不会自动被赋予默认值。它们的初始值是未定义的,这意味着它们包含的是它们所在内存位置的当前值,这些值可能是随机的、不可预测的,并且可能包含垃圾值。

为了避免使用未初始化的变量,你应该在声明变量时立即给它们赋值。这样,你就可以确保你的程序使用的是预期的值,而不是内存中的随机值。

例如:

int myFunction() {
    int myVar = 0; // 初始化为0
    // ... 其他代码 ...
    return myVar;
}

在这个例子中,myVar 被初始化为0,所以你可以安全地在后续的代码中使用它,而不必担心它包含的是未定义的值。

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

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

相关文章

【优选算法专栏】专题十六:BFS解决最短路问题(二)

本专栏内容为&#xff1a;算法学习专栏&#xff0c;分为优选算法专栏&#xff0c;贪心算法专栏&#xff0c;动态规划专栏以及递归&#xff0c;搜索与回溯算法专栏四部分。 通过本专栏的深入学习&#xff0c;你可以了解并掌握算法。 &#x1f493;博主csdn个人主页&#xff1a;小…

主从复制、数据持久化 、Redis主从集群、哨兵机制 、Redis分片集群

数据持久化 Redis、主从集群、哨兵机制 Redis分片集群 1、单点 redis 的问题2、主从复制2.1 命令传播 3、Redis的持久化3.1 AOF3.2 RDB&#xff08;默认方式&#xff09;RDB 方式&#xff1a;执行快照时&#xff0c;数据能被修改吗&#xff1f;RDB 方式总结 3.3 RDB 和 AOF 组合…

ORAN C平面 Section Extension 22

ORAN C平面Section扩展22用于ACK/NACK请求。除section type 7外&#xff0c;section扩展22可以用于从O-DU发送到O-RU的所有section type和section扩展。 对于一个section描述&#xff0c;O-DU可以使用section扩展22要求O-RU使用section type 8 C平面消息进行ACK/NACK反馈。关于…

ctfshow web入门 web29-web38

web29 把flag和i屏蔽了 system函数也行但是通常会屏蔽所以我直接用passthru 看看有啥 cat的话要查看源代码 web30 没有意外把这个system屏蔽了没事我不用哈哈哈 ?cpassthru("cat f*"); 然后查看源代码 web31 把空格屏蔽了 某位大佬的题解看到的 %09或者/**/绕过…

代码随想录第34天| 1005.K次取反后最大化的数组和 134. 加油站 135. 分发糖果

1005.K次取反后最大化的数组和 1005. K 次取反后最大化的数组和 - 力扣&#xff08;LeetCode&#xff09; 代码随想录 (programmercarl.com) 贪心算法&#xff0c;这不就是常识&#xff1f;还能叫贪心&#xff1f;LeetCode&#xff1a;1005.K次取反后最大化的数组和_哔哩哔…

思维的类比

Learn More, Study Less 中提出了整体学习法&#xff08;Holistic learning&#xff09;&#xff0c;其基本思想是&#xff1a;你不可能孤立地学会一个概念&#xff0c;而只能将其融入已有的概念体系中&#xff0c;从不同角度对其进行刻画来弄懂其内涵和外延并且书中使用三个类…

力扣2- 两数相加

给你两个 非空 的链表&#xff0c;表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的&#xff0c;并且每个节点只能存储 一位 数字。 请你将两个数相加&#xff0c;并以相同形式返回一个表示和的链表。 你可以假设除了数字 0 之外&#xff0c;这两个数都不会以 0 …

ubuntu安装

一、安装虚拟机 https://www.vmware.com/products/workstation-pro/workstation-pro-evaluation.html 下载后运行安装向导&#xff0c;一直Next即可 许可证&#xff1a; https://zhuanlan.zhihu.com/p/685829787#:~:textpro,17%E5%AF%86%E9%92%A5%EF%BC%9AMC60H-DWHD5-H80U9-6…

单词接龙--C++

目录 题目描述 输入格式 输出格式 输入 输出 一、AC代码 二、代码分析 三、vector加深理解 题目描述 单词接龙是一个与我们经常玩的成语接龙相类似的游戏&#xff0c;现在我们已知一组单词&#xff0c;且给定一个开头的字母&#xff0c;要求出以这个字母开头的最长的“…

【LAMMPS学习】八、基本知识的讨论(1.3)从一个输入脚本运行多个模拟

8. 基本知识的讨论 此部分描述了如何使用 LAMMPS 为用户和开发人员执行各种任务。术语表页面还列出了 MD 术语&#xff0c;以及相应 LAMMPS 手册页的链接。 LAMMPS 源代码分发的 examples 目录中包含的示例输入脚本以及示例脚本页面上突出显示的示例输入脚本还展示了如何设置和…

ICLR24_OUT-OF-DISTRIBUTION DETECTION WITH NEGATIVE PROMPTS

摘要 分布外检测&#xff08;OOD Detection&#xff09;的研究对于开放世界&#xff08;open-world&#xff09;学习非常重要。受大模型&#xff08;CLIP&#xff09;启发&#xff0c;部分工作匹配图像特征和提示来实现文本-图像特征之间的相似性。 现有工作难以处理具有与已…

灵活就业人员规模已达2亿人?财会卷王们如何在“卷卷卷”中脱颖而出?

先来看几个数据&#xff1a; 1️⃣2022年全国大学生毕业人数突破1000万&#xff0c;而2023年突破1100万&#xff1b; 2️⃣有超过200万海外留学生&#xff0c;即将回国就业&#xff1b; 3️⃣全国灵活就业人员规模已达2亿人。 &#xff08;图源&#xff1a;互联网&#xff0…

CSS变换

CSS变换 根据 CSS 的变换的功能特性&#xff0c;它可以分为位移、旋转、缩放、倾斜和透视&#xff1a; 也可以分成2D变换和3D变换&#xff0c;2D变换是二维平面上进行的&#xff0c;即 X 轴和 Y 轴。这些变换不涉及 Z 轴。3D 变换允许元素在三维空间中进行操作&#xff0c;这些…

Linux——计算机进程基础知识

计算机基础知识 1.计算机组成五大部件: (1) 运算器 &#xff1a;也叫算数逻辑单元&#xff0c;完成对数据的各种常规运算&#xff0c;如加减乘除&#xff0c;也包括逻辑运算&#xff0c;移位&#xff0c;比较等。 (2) 控制器 &#xff1a; 它是整个计算机系统的控制中心&…

Maven的scope详解

依赖范围介绍 maven 项目不同的阶段引入到classpath中的依赖是不同的&#xff0c;例如&#xff0c;编译时&#xff0c;maven 会将与编译相关的依赖引入classpath中&#xff0c;测试时&#xff0c;maven会将测试相关的的依赖引入到classpath中&#xff0c;运行时&#xff0c;mav…

三星:HBM4的16层堆叠技术验证成功

随着人工智能、大数据分析、云计算及高端图形处理等领域对高速、高带宽存储需求的激增&#xff0c;下一代高带宽内存&#xff08;High Bandwidth Memory, HBM&#xff09;——HBM4已成为全球存储芯片巨头三星、SK海力士和美光竞相追逐的技术高地。 随着AI、机器学习以及高性能…

Linux 5.10 Pstore 功能测试

目录 简介环境配置内核配置参考备注 简介 Pstore(Persistent store support)是用于系统发生oops或panic时&#xff0c;自动保存内核log buffer中的日志。随着功能不断完善&#xff0c;Duo S使用Linux 5.10已经支持保存console日志、ftrace消息和用户空间日志的收集&#xff0c…

JavaScript - 你能说出解决跨域的一些方案吗

难度级别:中高级及以上 提问概率:65% 回答解决跨域之前,首先建议求职者描述什么是跨域。跨域问题是浏览器基于同源策略引起的,同源策略是浏览器的一种安全功能。同源要保证域名相同,或是被访问服务的协议+主机+端口都相同,那么反之这些属…

信阳附大医院-市民心中的健康守护者

信阳附大医院,一所集医疗、预防、保健、科研、教学、康复于一体的现代化综合医院,坐落于信阳市工区路600号,是市卫生部门批准成立的医疗机构,更是市民心中的健康守护者. 医院环境优雅,设施先进,服务周到,汇聚了一支技术精湛、经验丰富的医疗团队.医师们以患者为中心,用心倾听,精…

Hybrid混合开发 和 Android平台JSBridge的原理

书接上篇&#xff1a;移动端研发技术的进化历程 纯原生开发主要面临动态化和开发成本两个问题&#xff0c;而针对这两个问题&#xff0c;诞生了一些跨平台的动态化框架。 针对原生开发面临的问题&#xff0c;业界一直都在努力寻找好的解决方案&#xff0c;而时至今日&#xf…