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

news2024/10/7 6:51:04

😁博客主页😁:🚀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语言的符号容易出错的地方,先是介绍注释符、接续符、转义符、单引号、双引号,然后介绍逻辑运算符、位运算符、自加(++)、自减(–)、运算符优先级 ,最好介绍花括号的作用。

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

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

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

相关文章

一次简单的测试

文章现写的&#xff0c;部分内容有些着急 0x01 测试过程 开局登录框&#xff0c;没有测试SQL注入与XSS(菜鸟&#xff0c;测也测不出来。) 有system用户&#xff0c;尝试弱口令&#xff0c;无果&#xff01; 直接namp来一下子端口探测吧 发现有3306与8888 3306 mysql测试 88…

python 之异常处理结构

文章目录 常见的异常处理表现形式1. SyntaxError2. NameError3. TypeError4. IndexError5. KeyError6. ZeroDivisionError7. FileNotFoundErrortry……except …… 结构1. try 块2. except 块示例&#xff1a;多个except块try……except ……else 结构结构说明&#xff1a;示例…

注册电气工程师(供配电)专业考试大纲纯干货分享

1.法律法规与工程管理 1.1熟悉我国工程勘察设计中必须执行法律、法规的基本要求&#xff1b; 1.2熟悉了解工程勘察设计中必须执行建设标准强制性条文的概念&#xff1b; 1.3了解我国工程项目管理的基本概念和项目建设法人、项目经理、项目招标与投标、项目承包与分包等基本要素…

MySQL 数据目录和 InnoDB 表空间补充知识:详细结构

1. 数据目录 在Ubuntu下&#xff0c;MySQL的数据目录为/var/lib/mysql 1.1 数据库在文件系统中的表示 &#xff08;1&#xff09;创建数据库时&#xff0c;会在数据目录下创建一个与数据库名同名的子目录。&#xff08;除了information_schema这个系统数据外&#xff09; &…

AVS3:双向梯度修正BGC

双向梯度修正&#xff08;Bi-directional Gradient Correction&#xff0c;BGC&#xff09;是利用双向参考块间的差值对预测值进行修正的技术。 BGC仅用于双向预测CU&#xff0c;设两个方向得到的单向预测值分别为pred0和pred1&#xff0c;修正前的双向预测值为predBI&#xf…

看完这篇,医学小白也能轻松玩转文献查阅

对医学生而言&#xff0c;文献查询是写论文必不可少的一环。然而这实在是一件重要但又心累的事情。你是否每次查找文献&#xff0c;都感觉自己在进行无意义的重复劳动&#xff1b;一天下来全在搜索、下载、保存&#xff1b;搜索引擎给出的结果太多太杂&#xff0c;或者找不到全…

linux C++实现线程绑定CPU

前言 嵌入式里面我们会使用到多核的cpu&#xff0c;随着产品芯片性能提升&#xff0c;我们也会有很多功能&#xff0c;以及很多进程产生运行&#xff0c;这个时候我们在任务调度调优的时候&#xff0c;把一些进程绑定到固定cpu运行&#xff0c;下面就来分享一下cpu绑定运行的过…

ubunt18.04.4 安装petalinux2022.2

安装Petalinux需要许多依赖&#xff1a; 安装下面的工具&#xff1a; sudo apt-get install net-tools sudo apt-get install xterm sudo apt-get install autoconf sudo apt-get install libtool sudo apt-get install texinfo sudo apt-get install zlib1g-dev sudo apt-get…

Android Studio报错:connect refused

参考链接&#xff1a; https://blog.csdn.net/qq_43213783/article/details/113936012 参考文章中说报错主要是由于代理导致的&#xff0c;在文件->设置->外观与行为->系统设置->HTTP代理。 方法一&#xff1a; 查看打开代理&#xff08;前提是代理可以通网&#x…

混沌系统在图像加密中的应用(小波混沌神经网络)

混沌系统在图像加密中的应用&#xff08;小波混沌神经网络&#xff09; 前言一、小波混沌神经网络模型二、拓展三、python代码 前言 小波混沌神经网络是一种神经网络模型&#xff0c;结合了小波变换和混沌理论&#xff0c;用于信号处理、分类和预测。该模型基于多层前向神经网…

经典OJ题:单链表相交

目录 题目&#xff1a; 链表相交&#x1f34c;的概念&#xff1a; 单链表相交&#x1f34c;主要的问题&#xff1a; 思路的分析&#x1f34c;&#xff1a; 问题的回答&#xff1a; 如何判断相交&#x1f34c;&#xff1a; 如何寻找交点&#x1f34c;&#xff1a; 代码演…

独立云厂商市场份额第一 | 云轴科技ZStack位居IDC云系统软件市场报告第一梯队

近日&#xff0c;全球IT市场研究和咨询公司IDC发布《中国云系统软件市场跟踪报告2023H1》报告&#xff0c;报告显示2023年上半年中国云系统软件整体市场规模达到24.08亿元&#xff0c;同比增长16.4%。其中&#xff0c;云轴科技ZStack 作为产品化的云基础软件提供商&#xff0c;…

Leetcode-206 反转链表

迭代法&#xff1a;将指针方向依次改变&#xff0c;定义两个指针pre和cur /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode() {}* ListNode(int val) { this.val val; }* ListNode(int val, Lis…

如何找出最优的【SVC】核函数和参数值—以乳腺癌数据集为例

在实际的工作中&#xff0c;有的时候我们不知道数据特征&#xff0c;也不知道我们的数据是线性还是非线性。因此我们需要对数据一步步进行摸索&#xff0c;来找到最优的核函数和参数值。接下来我们以sklearn乳腺癌数据集为例。 先来导入相应的模块&#xff1a; from sklearn.d…

solidworks安装时,出现这个错误:无法获得下列许可SOLIDWORKS Standard.无效的(不一致的)使用许可号码。(-8,544,0)

问题描述&#xff1a;在安装SolidWorks2023时&#xff0c;按照软件管家中的步骤&#xff0c;但是在打开SolidWorks2023桌面上的快捷键时&#xff0c;出现了这个错误&#xff1a; 无法获得下列许可SOLIDWORKS Standard.无效的&#xff08;不一致的&#xff09;使用许可号码。(-…

一文1600字使用Postman搞定各种接口token实战(建议收藏)

现在许多项目都使用jwt来实现用户登录和数据权限&#xff0c;校验过用户的用户名和密码后&#xff0c;会向用户响应一段经过加密的token&#xff0c;在这段token中可能储存了数据权限等&#xff0c;在后期的访问中&#xff0c;需要携带这段token&#xff0c;后台解析这段token才…

‘vue’不是内部或外部命令,也不是可运行的程序或批处理文件

vue不是内部或者外部命令 今天打算重新创建一个vue项目&#xff0c;结果一直创建不了&#xff0c; 于是我就npm uninstall -g vue/cli怀疑是cli版本的问题&#xff0c;结果删了过后想要重新安装变一直卡在sill idealTree buildDeps 然后就直接vue不是内部或外部命令了 然后我…

【uniapp小程序下载】调用uni.uploadfile方法在调试工具里是没有问题的,但是线上版本和体验版就调用不成功,真机调试也没问题

把你的下载地址前缀添加到合法域名就解决了 在调试工具里成功了是因为勾选了下面这项 下面是我的下载并打开函数 methods: {// 下载downloadFileFn(data) {if (this.detailsObj.currentUserBuy) {uni.downloadFile({// data是路径url: https:// data,success(res) {//保存到本…

2019 ICPC 银川题解(A,H,L)

赛时没发挥好6题金尾&#xff08;rank38&#xff09;&#xff0c;剩下很多能写的题&#xff0c;其中四个dp&#xff0c;傻眼ing The 2019 ICPC Asia Yinchuan Regional Contest A Girls Band Party&#xff08;背包&#xff09; 有点迷惑的题&#xff0c;当时看只要 5 5 5 张…

400 页共计 800 道软件测试面试真题汇总,2023年吐血整理

800 道软件测试面试真题&#xff0c;高清打印版打包带走&#xff0c;横扫软件测试面试高频问题&#xff0c;涵盖测试理论、Linux、MySQL、Web 测试、接口测试、App 测试、Python、Selenium、性能测试、LordRunner、计算机网络、数据结构与算法、逻辑思维、人力资源等模块面试题…