【初识C语言(2)】字符串+转义字符+注释

news2024/9/22 3:30:30

文章目录

  • 1. 字符串
  • 2. 转义字符
    • 转义字符表
    • 常见转义字符
  • 3. 注释

1. 字符串

“hello world.\n”

  • 上面这种由双引号引起的一串字符就被称为字符串

字符串的存储

  • C 语言当中没有字符串类型,如果想要将字符串存储起来的话就需要用到字符串数组
#include <stdio.h>

int main()
{
	char arr [] =  "abcdef" ;//7字节
	//使用字符串数组将 abcdef 这串字符存储起来

	return 0;
}

字符串结束标志

  • 字符串的结束标志是一个 \0 的转义字符。在计算字符串长度的时候 \0 是结束标志,不算作字符串内容。
  • 上面那段代码中,看起来只有 abcdef 这6个字符,实际上在字符串末尾还藏着个 \0 占一个字节的坑位。
#include <stdio.h>

int main()
{
	char arr[] = {'a','b','c','d','e','f'};
	//这种情况下 C 语言不会自动添加 \0 进去作为结束标志,所以这串字符占6字节
	return 0;
}

字符串没有 \0 的后果

在这里插入图片描述

  • 在正常自带 \0 的 arr1 字符串中,可以正确的将字符串打印出来。
  • 而在不带结束标志 \0 的 arr2 字符串中,只有在遇到 \0 的时候才算打印完成,所以在打印 arr2 的时候会在 f 后面一直找随机数,直到刚好随机到 \0 的时候此时才会被判断成该字符串结束,然后将其打印出来。
#include <stdio.h>

int main()
{
	char arr1 [] =  "abcdef" ;//用双引号括起来的字符,字符串末尾自动添加 \0
	char arr2 [] = { 'a','b','c','d','e','f' };//这种情况下C语言不会自动添加 \0 进去作为结束标志,所以这串字符占6字节
	char arr3 [] = { 'a','b','c','d','e','f','\0' };//在 arr2 的基础上主动添加一个 \0 也是一个正常的字符串

	printf("%s\n", arr1);
	printf("%s\n", arr2);
	printf("%s\n", arr3);

	return 0;
}

在这里插入图片描述

2. 转义字符

转义字符

  • 转变原来字符的意思

举个例子

在这里插入图片描述

  • 此时转义字符 \ 就将一个普通的字符 n 转换成一个换行符了。

转义字符表

转义字符释义
\?在书写连续多个问号时使用,防止他们被解析成三字母词
\’用于表示字符常量 ’
\"用于表示一个字符串内部的双引号
\\用于表示一个反斜杠,防止它被解释为一个转义序列符
\a警告字符,蜂鸣
\b退格符
\f进纸符
\n换行
\r回车
\t水平制表符
\v垂直制表符
\dddddd 表示 1-3 个八进制的数字。如:\130 X
\xdddd 表示 2 个十六进制的数字。如:\x30 0

常见转义字符

1. 转义字符 “ \? ”

  • 在书写连续多个问号时使用,防止他们被解析成三字母词。
    • 三字母词:早起某些编译器底下,在字符串中遇到多个问号+括号时可能结果和想象有所出入。
??) 会转变成 ]
??( 会转变成 [
  • 此时加上一个转义字符 \ 让 ? 就是一个单纯的小问号。

2. 转义字符 “ \’ ”

  • 用于表示字符常量 ’
#include <stdio.h>

int main()
{
	printf("%c\n", ''');
	//用两个单引号框柱一个单引号并不能准确打印出一个单引号
	//第二个单引号会先和第一个单引号结合,第三个就无人认领

	printf("%c", '\'');//正确打印出一个 ' (单引号)

	return 0;
}

3. 转义字符 “ \" ”

  • 和 \’ 类似,就是为了打印一个双引号 ” 出来。
//打印一个双引号

#include <stdio.h>

int main()
{
	printf("""); //第二个双引号先与第一个结合,第三个又落单了

	printf("\"");//正确打印一个双引号

	return 0;
}

4. 转义字符 “ \\ ”

  • 用于表示一个反斜杠,防止它被解释为一个转义序列符。
//打印一个反斜杠 \

#include <stdio.h>

int main()
{
	printf("abcd\\ef" );//让反斜杠单纯的就是一个反斜杠

	return 0;
}

5. 转义字符 “ \b ”

  • 退格符
//退格符://有几个 \b 就从右往左退几格,并将该位置字符删除

#include <stdio.h>

int main()
{
	printf("abcdef\b\b");
	printf("\nabcdef\b\b\b");

	return 0;
}

在这里插入图片描述

6. 转义字符 “ \n ”

  • 换行,用的最多了。
#include <stdio.h>
 
int main()
{
	printf("abc\ndef");//将会打印出abc与def在二行中

	return 0;
}

7. 转义字符 “ \t ”

  • 水平制表符,功能相当于键盘上的 TAB 键。

在这里插入图片描述

8. 转义字符 “ \ddd ”

  • ddd 表示 1-3 个八进制的数字,将三个八进制的数转义成对应的十进制。如:\130 X
//转义字符 \ddd

#include <stdio.h>

int main()
{
	printf("%c\n", '\130');
	//先将八进制的130转成对应的十进制 88,再打印出对应ASCII表中字符

	return 0;
}

在这里插入图片描述

9. 转义字符 “ \xdd ”

  • dd 表示 2 个十六进制的数字,将两个人十六进制的数转义成对应十进制。如:\x30 0
//转义字符 \xdd
#include <stdio.h>

int main()
{
	printf("%c\n", '\x30');
	//将十六进制的 30 转成对应的十进制数 48,再打印出对应ASCII表中字符

	return 0;
}

在这里插入图片描述

3. 注释

  1. 代码中有不需要的代码可以直接删除,也可以注释掉。
  2. 代码中有些代码比较难懂,可以加一下注释文字。
#include <stdio.h>

int Add(int x, int y)
{
    return x+y;
}

/*C语言风格注释
int Sub(int x, int y)
{
    return x-y;
}
*/

int main()
{
    //C++注释风格
    //int a = 10;
    //调用Add函数,完成加法

    printf("%d\n", Add(1, 2));
    
    return 0;
    
}

注释风格

  • C语言风格的注释 /* xxxxxx */
    • 缺陷:不能嵌套注释
  • C++风格的注释 //xxxxxxxx
    • 可以注释一行也可以注释多行

务必养成写注释的习惯

  1. 注释可以梳理代码;
  2. 对复杂的代码进行解释;
  3. 写代码的时候写注释,是利人利己的。

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

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

相关文章

LLaMA及其子孙模型概述

文章目录 LLaMAAlpacaVicunaKoalaBaize (白泽)骆驼(Luotuo)BELLEGuanaco LLaMA 与原始transformer的区别: 预归一化[GPT3]。为了提高训练稳定性&#xff0c;对每个Transformer子层的输入进行归一化&#xff0c;而不是对输出进行归一化。使用了Zhang和Sennrich&#xff08;201…

Redis进阶篇(附面试快速答法)

文章目录 Redis使用场景1、缓存穿透布隆过滤器小总结面试快速答法 2、缓存击穿小总结面试快速答法 3、缓存雪崩面试快速答法 4、双写一致性小总结面试快速答法 5、持久化机制面试快速答法 6、数据过期策略小总结面试快速答法 7、数据淘汰策略小总结面试快速答法 8、分布式锁小总…

Pytest集成Allure Report

目录 安装 用法 基本报告 支持 Pytest features Xfail 条件标记 Fixtures and Finalizers 参数化 Allure Features Steps 附件 描述 标题 链接 重试 Tags BDD 标签 严重性标记 Behave 安装 使用 Features 严重性 步骤和场景状态 步骤数据 安装 Pytest可从…

SpringBoot 如何使用 @RequestBody 进行数据校验

SpringBoot 如何使用 RequestBody 进行数据校验 在 Web 开发中&#xff0c;前台向后台发送数据是非常常见的场景。而在 SpringBoot 框架中&#xff0c;我们通常使用 RequestBody 注解来接收前台发送的 JSON 数据&#xff0c;并将其转化为 Java 对象。但是&#xff0c;接收到的…

你一定想知道的 如何进行动态内存管理?

文章目录 引言malloc函数calloc函数realloc函数free函数-避免内存泄漏常见的动态内存错误 引言 如果我们被问道&#xff1a;如何创建一个可以根据用户需求来开辟大小的数组&#xff1f; 可能有些博友会写出如下代码&#xff1a; #include <stdio.h> int main() {int n…

c++11 标准模板(STL)(std::basic_streambuf)(二)

定义于头文件 <streambuf> template< class CharT, class Traits std::char_traits<CharT> > class basic_streambuf; 类 basic_streambuf 控制字符序列的输入与输出。它包含下列内容并提供到它们的访问&#xff1a; 1) 受控制字符序列&#xff…

专项练习9

目录 一、选择题 1、在 JavaScript 中&#xff0c;用于阻止默认事件的默认操作的方法是 2、以下代码执行后&#xff0c;result 的值为&#xff08;&#xff09; 3、不能从字符串 const str qwbewrbbeqqbbbweebbbbqee;中能得到结果 ["b", "bb", "bbb…

实时在线云消费机、考勤门禁控制器、网络读卡器服务端C# Socket源码

消费机UDP通讯协议介绍&#xff1a; 设备向服务器发送的指令格式&#xff0c;每个字段用半角逗号(,)分隔。序号指令名称指令格式指令说明示例1响应服务器的搜索100,包序列号,终端IP,子网掩码,网关IP,远程电脑主机IP,端口号,终端硬件号响应电脑发出的搜寻局域网内所有终端设备指…

【Python 基础篇】Python 异常处理

文章目录 引言一、Python异常概述二、常见的内置异常三、异常处理语句四、异常捕获和处理五、实例演示六、总结 引言 在软件开发中&#xff0c;错误和异常是难以避免的。当我们编写Python代码时&#xff0c;有时候会遇到各种各样的问题&#xff0c;例如无效的输入、文件不存在…

hello算法笔记之树

一、二叉树 与链表类似&#xff0c;二叉树的基本单元是节点&#xff0c;每个节点包含一个「值」和两个「指针」。 在二叉树中&#xff0c;除叶节点外&#xff0c;其他所有节点都包含子节点和非空子树。 一些术语&#xff1a; 「根节点 Root Node」&#xff1a;位于二叉树顶…

VNC虚拟网络控制台(概述、windows系统连接linux系统演示)

第三阶段基础 时 间&#xff1a;2023年6月22日 参加人&#xff1a;全班人员 内 容&#xff1a; VNC虚拟网络控制台 目录 一、VNC概述 二、VNC基本上是由两部分组成 三、VNC特点 四、工作流程 五、安装 六、操作演示Windiws10系统远程控制linux 服务端&#xff1a;…

window版安装kafka并提供启动快捷脚本

kafka下载地址&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1DpcGXvpTYAcG_fvS-p9-3g?pwd1234 提取码&#xff1a;1234 官网&#xff1a;https://kafka.apache.org/downloads 注意不需要单独安装zk&#xff0c;里面包括zk Kafka解压包目录不要太深了&#xff0c…

养老院人员跌倒检测识别算法

养老院人员跌倒检测识别预警系统通过yolov5python网络模型技术&#xff0c;养老院人员跌倒检测识别预警算法对跌倒事件进行识别和分析&#xff0c;当检测到有人员跌倒时&#xff0c;将自动发出警报提示相关人员及时采取措施。YOLOv5是一种单阶段目标检测算法&#xff0c;该算法…

CTF-Show密码学【Base64、栅栏密码、16进制】

题目内容 密文&#xff1a;53316C6B5A6A42684D3256695A44566A4E47526A4D5459774C5556375A6D49324D32566C4D4449354F4749345A6A526B4F48303D 提交格式&#xff1a;KEY{XXXXXXXXXXXXXX}工具下载&#xff1a;https://www.lanzoui.com/i9fn2aj萌新_密码13 分析和解决过程 初步分析…

【Python 基础篇】Python 面向对象编程:理解与实践

文章目录 一、引言二、类与对象三、封装与访问控制四、继承与多态&#xff08;第一部分&#xff09;五、方法重写与多态&#xff08;第二部分&#xff09;六、抽象类与接口1、抽象类2、接口 七、类的关联与组合1、关联关系2、组合关系 八、面向对象设计原则1、SOLID原则2、设计…

实验 4:排序与查找

东莞理工的学生可以借鉴&#xff0c;请勿抄袭 1.实验目的 通过实验达到&#xff1a; 理解典型排序的基本思想&#xff0c;掌握典型排序方法的思想和相应实现算法&#xff1b; 理解和掌握用二叉排序树(BST)实现动态查找的基本思想和相应的实现 算法。 理解和掌握哈希(HASH)存…

【备战秋招】每日一题:2023.04.26-实习-第三题-MC方块

在线评测链接:P1231 题目内容 MC最新版本更新了一种特殊的方块&#xff0c;幽匿催发体。这种方块能够吸收生物死亡掉落的经验并感染周围方块&#xff0c;使其变成幽匿块。Steve想要以此为基础尝试搭建一个经验仓库&#xff0c;他来到了创造超平坦模式&#xff0c;在只有草方块…

[进阶]junit单元测试框架详解

单元测试 就是针对最小的功能单元(方法&#xff09;&#xff0c;编写测试代码对其进行正确性测试。 以前是如何进行单元测试的&#xff1f;有什么问题&#xff1f; 只能在main方法编写测试代码&#xff0c;去调用其他方法进行测试。无法实现自动化测试&#xff0c;一个方法测…

python数字猜谜2.0

改进了一下数字猜谜&#xff1a; 开头&#xff0c;可选等级&#xff1a; import random guess -1 c 0 print("数字猜谜游戏&#xff01;") n input("选择等级 A B C&#xff1a;") if (n "A") or (n "a"):guess random.randint…

模拟电路系列分享-阻容的频率响应

目录 概要 整体架构流程 技术名词解释 技术细节 1.以低通为例 2.高通电路&#xff1a; 总结&#xff1a; 概要 提示&#xff1a;这里可以添加技术概要 接着上一节的内容&#xff0c;这一节我们将介绍阻容的频率响应 整体架构流程 提示&#xff1a;这里可以添加技术整体架构…