【C语言 | 符号】C语言中符号易出错的地方

😁博客主页😁:🚀https://blog.csdn.net/wkd_007🚀
🤑博客内容🤑:🍭嵌入式开发、Linux、C语言、C++、数据结构、音视频🍭
🤣本文内容🤣:🍭介绍C语言的符号容易出错的地方🍭
😎金句分享😎:🍭天才就是最像自己的人。 ——塞隆尼斯·蒙克🍭

目录

  • 🎄一、标准C语言的符号
  • 🎄二、注释符、接续符、转义符、单引号、双引号
    • ✨2.1 注释符
    • ✨2.2 接续符和转义符
    • ✨2.3 单引号、双引号
  • 🎄三、运算符
    • ✨3.1 逻辑运算符
    • ✨3.2 位运算符
    • ✨3.3 自加(++)、自减(--) 运算符
    • ✨3.4 运算符优先级
  • 🎄四、花括号 {}
  • 🎄五、总结


在这里插入图片描述

🎄一、标准C语言的符号

C 语言的基本符号就有 20 多个,每个符号可能同时具有多重含义,而且这些符号之间
相互组合又使得 C 语言中的符号变得更加复杂起来。本文介绍C语言符号中,容易出错的地方。

符号名称符号名称
逗号>右尖括号
.圆点!感叹号
分号|竖线
冒号/斜杠
问号\反斜杠
单引号~波折号
双引号#井号
(左圆括号)右圆括号
[左方括号]右方括号
{左大括号}右大括号
%百分号&and(与)
^xor(异或)*乘号
-减号=等于号
<左尖括号+加号

在这里插入图片描述

🎄二、注释符、接续符、转义符、单引号、双引号

✨2.1 注释符

C语言中,注释符有两种

  • 单行注释://...
  • 多行注释:/*...*/

几个注意事项:

  • C语言中,注释符会被替换成空格,所以语句 int/*...*/i 是正确的,而语句 in/*...*/t i 是错误的;
  • /*/* 直接没有空格就表示注释开始,后面的内容会被注释掉;所以语句y=x/*p是错误的,需要写成y=x / *p
  • 注释符如果出现在双引号中,则是字符串常量的一部分而非注释,如:char *s="adc //def"; 是正确的。

✨2.2 接续符和转义符

接续符:C语言里,以反斜杠(\)为接续符,编译器会将反斜杠剔除,跟在反斜杠后面的字符会自动接续到前一行。注意,反斜杠后面不能有空格,反斜杠下一行之前也不能有空格。

下面例子都是合法的:

//这是一条合法的\
单行注释

/\
/这是一条合法的单行注释

#def\
ine MAC\
RO 这是一条合法的\
宏定义

cha\
r* s="这是一个合法的\\
n 字符串";

反斜杠在C语言中还可以用作转义符,下面是常见的转义符:

转义字符转义字符的意义
\n回车换行
\t横向跳到下一制表位置
\v竖向跳格
\b退格
\r回车
\f走纸换页
\\反斜扛符"\"
\’单引号符
\a鸣铃
\ddd1~3 位八进制数所代表的字符
\xhh1~2 位十六进制数所代表的字符

✨2.3 单引号、双引号

单引号引起来的都是字符常量,如:'a'、'b'、'c'
双引号引起来的都是字符串常量,如:"a"、"b"、"c"

注意: 字符常量'a' 和 字符串常量"a",在内存中,前者占1个字节,后者占2个字节,因为字符串常量还需要存一个字符串结束符\0"a" 实际上存了这两个字符:'a''\0'

在这里插入图片描述

🎄三、运算符

C语言的运算符可分为以下几类:

  1. 算术运算符:用于各类数值运算。包括加(+)、减(-)、乘(*)、除(/)、求余(或称模运算, %)、
    自增(++)、自减(--)共七种。
  2. 关系运算符:用于比较运算。包括大于(>)、小于(<)、等于(==)、 大于等于(>=)、小于等
    于(<=)和不等于(!=)六种。
  3. 逻辑运算符:用于逻辑运算。包括与(&&)、或(||)、非(!)三种。
  4. 位操作运算符:参与运算的量,按二进制位进行运算。包括位与(&)、位或(|)、位非(~)、
    位异或(^)、左移(<<)、右移(>>)六种。
  5. 赋值运算符:用于赋值运算,分为简单赋值(=)、复合算术赋值(+=,-=,*=,/=,%=)和复合位运
    算赋值(&=,|=,^=,>>=,<<=)三类共十一种。
  6. 条件运算符:这是一个三目运算符,用于条件求值(? :)。
  7. 逗号运算符:用于把若干表达式组合成一个表达式(,)。
  8. 指针运算符:用于取内容(*)和取地址(&)二种运算。
  9. 特殊运算符:有括号(),下标[],成员(->.)等几种。

下文挑几个容易出错的介绍。

✨3.1 逻辑运算符

逻辑运算符 && ,两边的条件只要有一个为假,其结果就为假,所以只要第一个条件为假时,第二个条件的语句就不会执行。
可以用下面代码验证,结果i=1j=2

#include <stdio.h>
int main()
{
	int i=0;
	if(++i<0 && ++i>0)// 只执行了++i<0, 条件为假, && 后面的语句没执行
	{
	
	}
	printf("i=%d \n",i);
	
	int j=0;
	if(++j>0 && ++j<0)// 执行了++j>0, 条件为真, && 后面的语句才执行
	{
	
	}
	printf("j=%d \n",j);
	return 0;
}

逻辑运算符 || ,两边的条件只要有一个为真,其结果就为真,所以只要第一个条件为真时,第二个条件的语句就不会执行。这里不给代码了,自己试试看。

✨3.2 位运算符

位操作运算符包括位与(&)、位或(|)、位非(~)、位异或(^)、左移(<<)、右移(>>)六种。
几个注意点:

  • 位与(&)、位或(|)使用时要与逻辑与(&&)、逻辑或(||)区分开;
  • 位操作运算最好先用宏定义后再使用,如:#define SETBIT(x,y) ((x)|=(y))
  • 位运算对有符号的整数通常会产生不可预料的结果;
  • 左移运算符<<,是把<<左边的数的各二进制位全部向左移动若干位,由<<右边的数指定移动的位数,高位丢弃,低位补 0;
  • 右移运算符>>是双目运算符。其功能是把 >> 左边的运算数的各二进位全部右移若
    干位, >>右边的数指定移动的位数。但注意:对于有符号数,在右移时,符号位将随同
    移动。当为正数时, 最高位补 0;而为负数时,符号位为 1,最高位是补 0 或是补 1 取决
    于编译系统的规定。
  • 左移和右移的位数不能大于和等于数据的长度,不能小于 0。

✨3.3 自加(++)、自减() 运算符

请问下面代码,ret的值是多少?不同的编译器可能会给出不同结果,gcc编译器的答案是16:

int i = 3int ret = (++i) + (++i) + (++i);

几个注意点:

  • ++-- 作为前缀时,是先自加或自减再做别的运算;
  • ++-- 作为后缀时,是在遇到 ,; 时,认为计算单位结束才自加或自减的;

贪心法:C 语言有这样一个规则,每一个符号应该包含尽可能多的字符。也就是说,编译器将程序分解成符号的方法是,从左到右一个一个字符地读入,如果该字符可能组成一个符号,那么再读入下一个字符,判断已经读入的两个字符组成的字符串是否可能是一个符号的组成部分;如果可能,继续读入下一个字符,重复上述判断,直到读入的字符组成的字符串已不再可能组成一个有意义的符号。

✨3.4 运算符优先级

下表是C语言运算符优先级表格:
在这里插入图片描述
在这里插入图片描述

下表就整理了这些容易出错的情况:
在这里插入图片描述

在这里插入图片描述

🎄四、花括号 {}

花括号的作用就是打包,为了把一些语句或代码打个包包起来,使之形成一个整体,并与外界绝缘。
下面语句哪些对,哪些错?

char a[10] = {“abcde”}; // 正确
char a[10] { = “abcde”};// 错误

int ret = {(++i) + (++i) + (++i)}; // 正确

在这里插入图片描述

🎄五、总结

本文介绍了C语言的符号容易出错的地方,先是介绍注释符、接续符、转义符、单引号、双引号,然后介绍逻辑运算符、位运算符、自加(++)、自减(–)、运算符优先级 ,最好介绍花括号的作用。

在这里插入图片描述
如果文章有帮助的话,点赞👍、收藏⭐,支持一波,谢谢 😁😁😁

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

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

相关文章

养老院展示服务预约小程序的作用是什么

养老院无论在哪个城市都有很高需求度&#xff0c;不少银发人群会因为种种原因而前往&#xff0c;而养老院近些年来各种服务也比较完善&#xff0c;增加了客户信任度及接受度&#xff0c;但对院方来说&#xff0c;也存在着一些痛点&#xff1a; 1、品牌传播服务呈现难 养老院也…

[NLP] 使用Llama.cpp和LangChain在CPU上使用大模型

一 准备工作 下面是构建这个应用程序时将使用的软件工具: 1.Llama-cpp-python 下载llama-cpp, llama-cpp-python [NLP] Llama2模型运行在Mac机器-CSDN博客 2、LangChain LangChain是一个提供了一组广泛的集成和数据连接器&#xff0c;允许我们链接和编排不同的模块。可以常…

华大基因推出产前筛查产品NIFTY®,助力防控显性单基因病

随着高通量测序技术在临床应用的迅速进步&#xff0c;从常见的染色体非整倍体扩展到性染色体和拷贝数变异&#xff0c;全球范围内已经开始将无创产前检测&#xff08;Non-invasive Prenatal Testing&#xff0c;NIPT&#xff09;的应用范围逐步扩大。近日&#xff0c;华大基因重…

【Mybatis小白从0到90%精讲】15: Mybatis配置打印SQL日志

文章目录 前言配置日志实现前言 日志(Log)是每个程序都不可或缺的一部分,它可以帮助开发人员诊断和调试问题。Mybatis,作为一款备受赞誉的ORM框架,自然也提供了强大的日志功能。 它不仅提供了内置的标准实现,还支持集成各种主流的日志框架,让我们可以轻松地查看最终执行…

休眠和睡眠有哪些区别?如何让电脑一键休眠?

电脑中有休眠和睡眠&#xff0c;那么它们有什么区别呢&#xff1f;下面我们就通过本文来了解一下。 休眠和睡眠的区别 电脑在睡眠状态时&#xff0c;会切断内存之外的设备电源&#xff0c;电脑会进入睡眠状态&#xff0c;当再次唤醒电脑后&#xff0c;不会影响睡眠前保存好的工…

柱状图:带误差棒

误差棒可以表示样本标准差&#xff0c;也可以表示样本标准误。 导入库&#xff1a; import pandas as pd 自定义用来绘制带误差棒&#xff08;样本标准差或样本标准误&#xff09;的柱状图&#xff1a; def col(y, x, face, df, errprbarstd) : print(ggplot(df.groupby([x…

搭建WAMP网站教程(Windows+Apache+MySQL+PHP)

之前为了学习网络安全&#xff0c;从搭建网站学起&#xff0c;对网站运行有个初步的了解。 今天翻到了之前的笔记&#xff0c;顺手发到csdn上了。 搭建网站步骤 一、Apache 安装Apache&#xff0c;下载Apache之后把Apache解压&#xff0c;此处解压到C:\目录下 2.然后要记得安…

Notepad++中删除连续的任意n行

使用Notepad里的行标记功能&#xff0c;可以删除指定的任意n行。 案例1&#xff0c;删除sample2.dat里的第201行到第10000行。方法如下&#xff1a; (1) 用户NotePad打开sample2.dat&#xff0c;右击201行 —》“开始/结束”/开始 图(1) 选择行的起点&#xff1a;201 (2) 接…

Git 的基本操作 ——命令行

Git 的工作流程 详解如下&#xff1a; 本地仓库&#xff1a;是在开发人员自己电脑上的Git仓库,存放我们的代码(.git 隐藏文件夹就是我们的本地仓库) 远程仓库&#xff1a;是在远程服务器上的Git仓库,存放代码(可以是github.com或者gitee.com 上的仓库,或者自己该公司的服务器…

【动手学深度学习】课程笔记 05-07 线性代数、矩阵计算和自动求导

05 线性代数 1. 基础知识补充 向量相关 矩阵相关 简单来说&#xff0c;范数是用来衡量矩阵&#xff08;张量&#xff09;大小的值&#xff0c;范数的值有不同的规定。 2. 代码实现 仅记录一些我比较陌生的知识。 张量的克隆 A torch.arange(20, dtypetorch.float32).resh…

10个免费3D模型网站

作为一名独立游戏开发者&#xff0c;自己创建图形、配乐、动画和更多东西是相当具有挑战性的。 创建资产所需的成本和时间有时是许多游戏开发商无法承受的。 这就是他们选择在互联网上搜索免费内容的原因。现在&#xff0c;在浩瀚的内容海洋中获得如此免费的东西有点困难。 本文…

阿里云安全恶意程序检测(速通三)

阿里云安全恶意程序检测 特征工程进阶与方案优化pivot特征构建pivot特征pivot特征构建时间pivot特征构建细节特点 业务理解和结果分析结合模型理解业务多分类问题预测结果分析 特征工程进阶基于LightGBM模型验证模型结果分析模型测试 优化技巧与解决方案升级内存管理控制加速数…

Mac版eclipse如何安装,运行bpmn文件

一、下载程序包 网址&#xff1a;https://www.eclipse.org/downloads M2芯片安装包名称&#xff1a;eclipse-jee-2022-12-R-macosx-cocoa-aarch64.dmg 具体安装包版本根据自己电脑型号选择 二、eclipse安装步骤 1&#xff09;双击下载的文件 2&#xff09;将eclipse拖入到…

vue项目npm install报错解决

一、报错信息 node-sass4.14.1 postinstall: node scripts/build.js 二、解决方式 &#xff08;1&#xff09;删除未成功安装的 node_modules 文件&#xff1b; &#xff08;2&#xff09;为 node-sass 单独设置镜像源&#xff1b; npm config set sass_binary_sitehttps:/…

pytorch直线拟合

目录 1、数据分析 2、pytorch直线拟合 1、数据分析 直线拟合的前提条件通常包括以下几点&#xff1a; 存在线性关系&#xff1a;这是进行直线拟合的基础&#xff0c;数据点之间应该存在一种线性关系&#xff0c;即数据的分布可以用直线来近似描述。这种线性关系可以是数据点…

【1107】

interface是面向对象编程语言中接口操作的关键字&#xff0c;功能是把所需成员组合起来&#xff0c;用来封装一定功能的集合。 它好比一个模板&#xff0c;在其中定义了对象必须实现的成员&#xff0c;通过类或结构来实现它。 接口不能直接实例化&#xff0c;即ICount icnew iC…

【广州华锐互动】VR综合布线虚拟实验教学系统

随着科技的不断发展&#xff0c;虚拟现实&#xff08;VR&#xff09;技术已经逐渐渗透到各个领域&#xff0c;为人们的生活和工作带来了前所未有的便利。在建筑行业中&#xff0c;VR技术的应用也日益广泛&#xff0c;尤其是在综合布线方面。 广州华锐互动开发的VR综合布线虚拟实…

Vue路由介绍及使用

一、单页应用程序介绍 1.概念 单页应用程序&#xff1a;SPA【Single Page Application】是指所有的功能都在一个html页面上实现&#xff0c;当切换不同的功能时&#xff0c;页面不会进行刷新&#xff0c;类似Ajax请求&#xff0c;但请求地址会发生部分变化。 2.具体示例 单…

Cesium 展示——将每个点和点所在线段进行关联

文章目录 需求分析1. 数据结构2. 点线绘制3. ID获取4. 进行关联需求 点的集合和线的集合已知,现需将每个点和每个点所在的关联的线进行关联起来 输入 输出 分析 1. 数据结构 l

3线SPI驱动 HX8347 TFT屏

老五家2.8寸屏&#xff0c;3线SPI驱动 前言 要知道屏幕的驱动芯片都小的惊人&#xff0c;想必是不会打上丝印的。从几百个引脚中判断哪个是哪个&#xff0c;想想就晕。 大佬们都太厉害了&#xff0c;看看PFC就知道屏幕的接线定义。一直好奇这种神技是怎么练成的。也尝试自己来…