【C】C语言常见概念~

news2024/12/23 19:47:40

C语言常见概念

转义字符

转义字符,顾名思义,转变原来意思的字符
比如

#include <stdio.h> 
int main()
{
	printf("abcndef");
	return 0;
}

输出的结果为:
在这里插入图片描述
将代码修改一下:

#include <stdio.h> 
int main()
{
	printf("abc\ndef");
	return 0;
}

输出的结果变为:
在这里插入图片描述
\n就是一个转义字符,表示换行

常见的转义字符如下:

\?
在书写连续多个问号时使用,防止他们被解析成三字母词,在新的编译器上没法验证了
\'
用于表示字符常量’
\"
用于表示一个字符串内部的双引号
\\
用于表示一个反斜杠,防止它被解释为一个转义序列符
\a
警报,这会使得终端发出警报声或出现闪烁,或者两者同时发生
\b
退格键,光标回退一个字符,但不删除字符
\f
换页符,光标移到下一页。在现代系统上,这已经反映不出来了,行为改成类似于\v
\n
换行符
\r
回车符,光标移到同一行的开头
\t
制表符,光标移到下一个水平制表位,通常是下一个4/8的倍数
\v
垂直分隔符,光标移到下一个垂直制表位,通常是下一行的同一列

下面2种转义字符可以理解为:字符的8进制或者16进制表示形式:

\ddd:d d d表示1~3个八进制的数字
如:\130 表示字符X

\xdd:d d表示2个十六进制数字。
如:\x30 表示字符0

\e
null 字符,代表没有内容,\e 就是\ddd这类转义字符的一种,用于字符串的结束标志,其ASCII码值是0.

三字母词

??) 输出为 ]
??( 输出为 [
例如

#include <stdio.h>
int main(){
	printf("(are you ok??)");
	return 0;
} 

输出应为:( are you ok]
但实际:
在这里插入图片描述
因为当前的编译器已经不再支持三字母词

正确的写法应该为:

#include <stdio.h>
int main(){
	printf("(are you ok\?\?)");
	return 0;
} 

打印单引号:

错误示范:

#include <stdio.h>
int main(){
	printf("%c\n",''');
	return 0;
} 

这是因为中间的单引号与左面的单引号结合成一对
故,应该将中间的单引号转义

#include <stdio.h>
int main(){
	printf("%c\n",'\'');
	return 0;
} 

输出结果为一个单引号:
在这里插入图片描述
同理,打印双引号:

#include <stdio.h>
int main(){
	printf("%c\n",'\"');
	return 0;
} 

在这里插入图片描述

打印\

当我们想打印:c:\test\ddd\test.c的时候,若编写代码如下:

#include <stdio.h>
int main(){
	printf("c:\test\ddd\test.c");
	return 0;
} 

就会发现输出很奇怪:
在这里插入图片描述
这是因为编译器识别的时候,将\当成了转义字符

正确代码如下:

#include <stdio.h>
int main(){
	printf("c:\\test\\ddd\\test.c");
	return 0;
} 

这时候,我们就得到了想要的输出:
在这里插入图片描述

\b

#include <stdio.h>
int main(){
	printf("abcdef");
	getchar();//读取一个字符 
	return 0;
} 

此时光标位置:
在这里插入图片描述

添加\b后:

#include <stdio.h>
int main(){
	printf("abcdef\b");
	getchar();//读取一个字符 
	return 0;
} 

在这里插入图片描述

如果在这之后打印一个x:

#include <stdio.h>
int main(){
	printf("abcdef\b");
	printf("x");
	getchar();//读取一个字符 
	return 0;
} 

则输出:
在这里插入图片描述
会发现:x将f覆盖

\t

#include <stdio.h>
int main(){
	printf("a\taa\taaa\taaaa\txx");
	
	return 0;
} 

输出为:
在这里插入图片描述
可以看出:从开始打印a到打印aa之前,为8个字符

也就是说,a和aa之间跳过了七个字符,aa和aaa之间跳过了六个字符…以此类推

\ddd

#include <stdio.h>
int main(){
	printf("%c\n",'\130');
	
	return 0;
} 

在这里插入图片描述
说明,八进制中130代表X
怎么来的呢?
从末位开始,八进制情况下,分别代表8的0次幂,8的1次幂…依次递增
esp:130:1×64 + 3×8+ 0×1=88, 而ASC码值88对应的就是X字符

\0就是\ddd形式的转义字符

\xdd

#include <stdio.h>
int main(){
	printf("%c\n",'\x30');
	
	return 0;
} 

在这里插入图片描述
十六进制中,30对应的十进制数字,与八进制同理,为:
3×16+0×1=48
而ASC码值为48对应的是0
故打印结果为0

一个练习:

#include <stdio.h>
#include <string.h>
int main(){
	//int len=strlen("abc");
	//a b c \0 
	//strlen统计的是字符串中\0之前的字符个数 ,不算\0 
	//8进制的数字是0~7组成的
	//16进制的数字是由0~9+A~F表示(0~15) 
	int len=strlen("c:\test\abc\182\test.c") ;
	printf("%d",len);
	return 0;
} 

练习:数一数这个字符串有多少个字符

在这里插入图片描述
故为,18个

但如果将182改为123,会发现,变为16个字符
这是因为:
\123会被视为\ddd的结构从而变为1个字符

语句和语句的分类

C语言的代码是由一条一条的语句构成,C语言中的语句可分为五类
1.空语句
2.表达式语句
3.函数调用语句
4.复合语句
5.控制语句

空语句

#include <stdio.h>
int main(){
	;
	return 0;
} 

表达式语句

#include <stdio.h>
int main(){
	3+4;
	return 0;
	} 

函数调用语句

#include <stdio.h>
int main(){
	printf("hehe");
	return 0;
} 

复合语句(代码块)

#include <stdio.h>
int main(){
	{}
	return 0;
} 

控制语句

#include <stdio.h>
int main(){
	//if switch for....
	return 0;
} 

控制语句用于控制程序的执行流程,以实现程序的各种结构方式(C语言支持三种结构: 顺序结构、选择结构、循环结构),它们由特定的语句定义符组成

C语言有九种控制语句。可分成以下三类:
1.条件判断语句也叫分支语句:if语句、switch语句
2.循环执行语句: do while语句、while语句、for语句
3.转向语句: break语句、goto语句、continue语句、return语句

注释

注释是对代码的说明编译器会忽略注释,也就是说,注释对实际代码没有影响。注释是给程序员自己,或者其他程序员看的

好的注释可以帮我们更好的理解代码,但是也不要过度注释,不要写没必要的注释当然不写注释可能会让后期阅读代码的人抓狂

注释的2种形式

/**/的形式

第一种方法是将注释放在/* … */之间,内部可以分行

/*   注释    */

/*
     这是一行注释
*/ 

这种注释可以插在行内,但不可以嵌套

/开始注释后,遇到第一个/就认为注释结束了。

//的形式

第二种写法是将注释放在双斜杠 //后面,从双斜杠到行尾都属于注释。这种注释只能是单行,可以放在行首,也可以放在一行语句的结尾。这是C99标准新增的语法。

//这是一行注释

int i=1;//这是一行注释 

不管是哪一种注释,都不能放在双引号里面
双引号里面的注释符号,会成为字符串的一部分,解释为普通符号,失去注释作用
注释会被替换成空格

int num2;
int num/*he*/2; 

第二种就会变为

int num 2; 

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

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

相关文章

如何创建诊断数据库模板(CDDT)

创建一个新的模板文件有两种方式&#xff1a; 1.修改现有模板形成自定义的模板 CANdelaStudio 21提供了基本范本&#xff0c;Vector_UDS_21.cddt&#xff0c;存放在C:\Users\Public\Documents\Vector\CANdelaStudio\21\Examples目录下。打开CANdelaStudio软件后&#xff0c;点击…

鸿蒙开发案例:HarmonyOS NEXT语法实现2048

【实现的功能】 • 游戏逻辑&#xff1a;实现了2048游戏的核心逻辑&#xff0c;包括初始化游戏盘面、添加随机方块、处理四个方向的滑动操作等。 • UI展示&#xff1a;构建了游戏的用户界面&#xff0c;显示得分、游戏盘面&#xff0c;并提供了重新开始按钮。 • 用户交互&…

6.资源《 Arduino UNO R3 proteus使用MAX7219控制多个数码管工程文件(含驱动代码)》说明。

资源链接&#xff1a; Arduino UNO R3 proteus使用MAX7219控制多个数码管工程文件&#xff08;含驱动代码&#xff09; 1.文件明细&#xff1a; 2.文件内容说明 包含&#xff1a;proteus工程&#xff0c;内含设计图和工程代码。 3.内容展示 4.简述 工程功能可以看这个视频…

即插即用hilo注意力机制,捕获低频高频特征

题目&#xff1a;Fast Vision Transformers with HiLo Attention 论文地址: https://arxiv.org/abs/2205.13213 创新点 HiLo自注意力机制&#xff1a;作者提出了一种新的自注意力机制&#xff0c;称为HiLo注意力&#xff0c;旨在同时捕捉图像中的高频和低频信息。该方法通过…

数据结构 ——— 顺序表oj题:有效的括号

目录 题目要求 代码实现 题目要求 给定一个只包括 (&#xff0c;)&#xff0c;{&#xff0c;}&#xff0c;[&#xff0c;] 的字符串 s &#xff0c;判断字符串是否有效 有效字符串需满足&#xff1a; 左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。每个…

深入解析网络流量回溯分析:如何有效进行网络故障排除

目录 什么是网络流量回溯分析&#xff1f; 网络流量回溯分析的核心优势 网络流量回溯分析如何助力网络故障排除&#xff1f; 1. 快速定位故障节点 真实案例&#xff1a;解决网络延迟问题 2. 精准分析流量异常 真实案例&#xff1a;识别恶意流量 3. 优化网络性能 为什么…

【Linux指令策】❤️基本必备指令❤️——打开Linux大门,带你快速上手Linux(超详细,收藏这一篇就足够啦~!!!)

【Linux入门】——基本指令 目录 一&#xff1a;认识操作系统 1.1&#xff1a;操作系统是什么&#xff1f; 1.2&#xff1a;操作系统 ——管理 1.3&#xff1a;操作系统——贯穿 二&#xff1a;Linux基本指令 2.1-指令学习&#xff08;上篇&#xff09; 2.1.1 > ls …

Chromium 前端form表单提交过程分析c++

一、本文以一个简单的 HTML 表单&#xff0c;包含两个文本输入框和一个提交按钮&#xff1a; <form action"demo_form.php">First name: <input type"text" name"fname"><br>Last name: <input type"text" name…

Unreal5从入门到精通之 如何使用事件分发器EventDispather

文章目录 前言1.创建事件分发器设置属性2.创建Bind、Unbind及Unbind All节点在蓝图类中创建在关卡蓝图中创建3.创建事件分发器事件节点4.调用事件分发器在蓝图类中进行调用在关卡蓝图中进行调用精彩推荐前言 事件分发器是 Unreal Engine(UE)中一个重要的概念,它负责在游戏运…

【C++】右值引用和移动语义(带你理解C++为何如此高效)

1.右值引用和移动语义 左值和右值的重点区分是能否取地址。 能取地址的是左值&#xff08;可以是值&#xff0c;也可以是表达式&#xff09;&#xff0c;不能取地址的是右值。 1.1 什么是左值 1.2 什么是右值 1.2.1 常见的右值 常见右值&#xff1a;常数&#xff08;10&…

【C/C++】速通某站上的经典“笔试”编程题

【C/C】速通某站上的经典“笔试”编程题 一. 题目描述&#xff1a;解题思路&#xff1a;代码实现&#xff1a; 二. 题目描述&#xff1a;解题思路&#xff1a;代码实现&#xff1a; 三. 题目描述&#xff1a;解题思路&#xff1a;代码实现&#xff1a; 一. 题目描述&#xff1a…

DS线性表之栈的讲解和实现(4)

文章目录 前言一、栈的概念及结构二、关于实现栈的分析关于栈顶指针top关于结构体栈的初始化入栈出栈获取栈顶元素获取栈元素个数判断栈是否为空栈的销毁 总结 前言 栈就是一个比较实用的数据结构了&#xff0c;且大致逻辑就是套用之前的两种线性表 具体选择哪种呢&#xff1f;…

综合布线研究实训室建设方案

1、 引言 随着信息技术的飞速发展&#xff0c;综合布线系统作为信息传输的基础设施&#xff0c;在各类建筑及信息化项目中发挥着越来越重要的作用。为了满足职业院校及企业对综合布线技术人才培养和研究的需求&#xff0c;本方案旨在建设一个集教学、实训、研究于一体的综合布…

ARM base instruction -- smull

有符号乘法运算 Signed Multiply Long multiplies two 32-bit register values, and writes the result to the 64-bit destination register. 将两个32位寄存器值相乘&#xff0c;并将结果写入64位目标寄存器。 64-bit variant SMULL <Xd>, <Wn>, <Wm>…

Linux破解root用户密码

在Linux启动菜单界面按【e】进入编辑启动菜单项 在LANGzh_CN.UTF-8&#xff08;或LANGen_US.UTF-8&#xff09;后面空出一格输入 rd.break consoletty0,再按【ctrlx】键启动Linux系统 以可读写的方式重新挂载文件系统 mount -o remount,rw /sysroot 改变根目录为/sysro…

Attention Is All You Need论文翻译

论文名称 注意力即是全部 论文地址 https://user.phil.hhu.de/~cwurm/wp-content/uploads/2020/01/7181-attention-is-all-you-need.pdf 摘要 主流的序列转导模型基于复杂的递归或卷积神经网络&#xff0c;这些网络包含编码器和解码器。性能最好的模型通过注意力机制将编码器和…

快速学习一个算法,Transformer模型架构

今天给大家分享一个超强的算法模型&#xff0c;Transformer Transformer 模型是目前自然语言处理&#xff08;NLP&#xff09;以及计算机视觉等领域中应用非常广泛的深度学习模型架构。 它由 Vaswani 等人在 2017 年的论文《Attention is All You Need》中提出&#xff0c;并…

【智能大数据分析 | 实验三】Storm实验:实时WordCountTopology

【作者主页】Francek Chen 【专栏介绍】 ⌈ ⌈ ⌈智能大数据分析 ⌋ ⌋ ⌋ 智能大数据分析是指利用先进的技术和算法对大规模数据进行深入分析和挖掘&#xff0c;以提取有价值的信息和洞察。它结合了大数据技术、人工智能&#xff08;AI&#xff09;、机器学习&#xff08;ML&a…

并查集的实现(朴素版)

这是C算法基础-数据结构专栏的第二十九篇文章&#xff0c;专栏详情请见此处。 由于作者即将参加CSP&#xff0c;所以到比赛结束前将不再发表文章&#xff01; 引入 并查集是一种可以快速合并查找集合的一种数据结构&#xff0c;这次我们将通过三道题来详细讲解并查集&#xff…

迈普pnsr2900x DOWNLOAD_FILE 任意文件读取漏洞

0x01 产品描述&#xff1a; ‌ 迈普NSR2900X系列是一款专为军队、政府、金融、中小型企业分支机构和中小型企业总部设计的信创接入路由器。‌ 该路由器采用国产核心元器件&#xff0c;基于国产操作系统运行迈普自主研发的网络操作系统及应用软件。它全面支持IPv4、IPv6、OS…