打卡:4.9 C语言篇 -(1)初识C语言 - (5)字符串-转义字符-注释

2023-10-29

C语言篇 -(1)初识C语言 - (5)字符串-转义字符-注释

简介:

大家好,我是小奔,每天一笔记,从最基础开始写,展现我自己学习过程,如果感觉不错,就点一下关注啦

纠正:

字符串

这一篇博客我们来了解一下字符串,看下面这个我们熟知的也是最先学习的代码

"Hello world!"

这一堆的字母就是字符串字面值,简称字符串,每一个字母都是一个字符,字符串需要用" "双引号来引起,字符需要用’ '单引号来引起,就像下面

"Hello world!"  //字符串
'a'  //字符
'!'  //字符

字符串也算常量,上面三条都算字面常量,之前的讲常量的时候就举过这种例子

那么字符串有什么用呢?
假设我们要把下面的字符串存起来,那么我们需要怎么存呢?

"abcdef"

我们可以把它放在字符串数组里,有两种形式如下:

#include<stdio.h>

int main()
{
char arr1[10]="abcdef";                     //形式一
char arr2[10]={'a','b','c','d','e','f'};    //形式二

//我们打印一下这些字符串
printf("%s\n",arr1);
printf("%s\n",arr2);

return 0;
}

运行的结果:
abcdef
abcdef
请添加图片描述

把"abcdef"都存在arr[ ]这个数组里面,[ ]里面数是多少,就能存多少字符

arr[10]可以存10个字符 ,但一定要不小于你要存的字符

你也可以不写[ ]里面的数字,它会自己根据你要存的字符串来调整,就像这样

#include<stdio.h>

int main()
{
char arr[]="abcdef";    //char-字符类型,没有字符串类型哦
return 0;
}

那这两种形式有什么区别呢?
我们不写arr[ ]里面的数字,我们来看一下

#include<stdio.h>

int main()
{
char arr1[]="abcdef";
char arr2[]={'a','b','c','d','e','f'};

//我们打印一下这些字符串
printf("%s\n",arr1);
printf("%s\n",arr2);

return 0;
}

运行的结果:
abcdef
abcdef烫烫烫烫烫abcdef
请添加图片描述
哎,发现没有,它们不一样了那为什么会出现这种情况呢?

先想一个问题,它是根据什么来停止打印的?
(啊,你会问:它们后面啥都没有,我怎么会知道它们根据什么来停下来的)
那里确实看不见有什么标志,但是那个标志就是看不见的字符串的结束标志是\0,它是一个我们马上就会学到的转义字符

char arr1[]="abcdef";

这个形式一,字符串后面就默认带了一个\0

char arr2[]={'a','b','c','d','e','f'};

这个形式二,后面没有\0

懂了吧,printf去打印的时候要识别到\0才会结束

第一个形式最后一个字符结束就识别到了\0,然后结束
第二个形式识别到最后的f,一直都没有识别到\0,就一直打印下去,最后就出现刚才的结果

那么如果我们给第二个形式加一个\0作为结束标志怎么样,不要光想,我们来做一下试试

#include<stdio.h>

int main()
{
char arr1[]="abcdef\0";   //我们也试一下给它也加一个\0
char arr2[]={'a','b','c','d','e','f','\0'};

//我们打印一下这些字符串
printf("%s\n",arr1);    //%s是打印字符串的
printf("%s\n",arr2);    //%s是打印字符串的
 
return 0;
}

运行的结果:
abcdef
abcdef
请添加图片描述
结果运行正常了

那么\0算不算里面的字符串长度的一部分呢?
又来介绍一个好东西,strlen,它可以计算一个字符串长度的函数,但是使用它还是跟以前一样,需要给另一个头文件string.h打一下招呼才能使用它,我们来实操一下:

#include<string.h>
#include<string.h>

int main()
{
	char a[] = "abc";
	char b[] = "abc\0";
	printf("%d", strlen(a));
	printf("%d", strlen(b));
	return 0;
}

运行结果:
3
3
请添加图片描述

"abc"

这个字符串的长度为3,所以我们可以知道看不见的\0并不算在长度里面的,就算在后面加上\0也是一样

大家可以试一试计算一下第二种形式不加\0情况下的字符串长度,保持好奇心,去自己尝试一下。

就这样,我们把"abcdef"这个数组储存起来了,那我们要使用里面的字符怎么办?我们还需要再了解一个知识:

调用arr里面字符,用arr[2]就可以调用c,用arr[0]就可以调用a,它们的对应关系也就是:

 a  b  c  d  e  f
 0  1  2  3  4  5

我们来实验一下

#include<stdio.h>

int main()
{
char arr[]="abcdef";
printf("%c",arr[2]);
return 0;
}

运行结果:
a
请添加图片描述

#include<stdio.h>

int main()
{
char arr[]="abcdef";
printf("%c",arr[0]);
return 0;
}

运行结果:
a
请添加图片描述

转义字符

今天我们来了解一下转义字符,转义字符顾名思义就是转变意思。
现在了解一下这些字符:

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

为什么要使用这些转义字符呢?

我们来说一下三字母词(过去有,现在使用的编译器不使用它了,所以就演示不了了),如果我们要打印一些字符,比如??),在三字母词中它对应的符号是]

     ??) --> ]
     ??( --> [

表示的是你本来想要打印的是??) 这三个符号,但是在编译器看来,它们是],所以它会给你打印出],而不是??)

那么你就想要打印出 ??) 怎么办呢?

我们只需要把??)前加一个 \

\?\?)
//转义字符  \?

它可以让 变成不是三字母词中的,让它老老实实的就是一个?,所以编译器就不会打印出 ]

三字母词实在是太古老了,但是这个语法不能消失,所以我们一直都在使用转义字符

这里总结一下我们打印所用到的格式

//%d - 打印整型
//%c - 打印字符
//%s - 打印字符串
//%f - 打印float类型的数据
//%lf - 打印double类型的数据
//%zu - 打印sizeof的返回值

如果我们要打印一个字符,如下:

#include<stdio.h>

int main()
{
printf("%c",''');   //我们来打印'
return 0;
}

运行结果:
出现了错误
请添加图片描述

那么出错的原因是什么?
我们来看这 ''' ,printf识别的时候,识别第一个 ' ,然后再识别一个 ' ,哎,到这里就结束了,就像识别这个字符一样'w',只要识别到一对儿',打印就会结束,但是后面还有第三个 ' 是多余的,就出错了

那么,我们使用转义字符 \' ,让'不再是一对儿'w' 里面的',就像上面的??)一样

验证一下:

#include<stdio.h>

int main()
{
printf("%c",'\'');   //我们来打印'
return 0;
}
//转义字符  \'

运行的结果:

请添加图片描述
再来继续了解转义字符
我们打印字符串有两个形式:

#include<stdio.h>

int main()
{
printf("%s\n","abcdef"); //形式一
printf("abcdef");        //形式二
return 0;
}

第二种形式不能直接像下面这样打印:

printf(2123456)//错误的

如果我们在abcdef中间加一个\0,但因为它代表的是换行,所以我们需要让它失效,让\0就是\0,没有其他含义,只需要这样就可以了:

#include<stdio.h>

int main()
{
printf("%s\n","abc\\0def"); //形式一
printf("abc\\0def");        //形式二
return 0;
}
//转义字符  \\

上面那个表里的转义字符都是这样子来使用的

来练习一个题

#include <stdio.h>
#include <string.h>
int main()
{
    printf("%d\n", strlen("c:\test\121"))
    return 0;
}

它的输出结果是什么?
答案解析:

strlen:获取字符串的有效长度,不包括’\0’
“c:\test\121”: 在该字符串中,\t是转移字符,水平制表,跳到下一个tab的位置;而\121表示一个字符,是讲121看做8进制数组,转换为10进制后的81,作业为ASCII码值的字符,即:字符’Q’ ,故上述字符串实际为:“c: esty”,只有7个有效字符

如果我们真的要打印c:\test\121,需要变成c:\\test\\121,这样就可以把c:\test\121给打印出来

关于转义字符,我们只需要记住特殊的就行,没有必要全部记忆,我们以后是会用到一些的

注释

在之前小奔写代码的时候,你会经常看到//

//这个是注释,注解解释的意思,它可以让一段代码无效化,常用作解释一段代码的作用
就像这样:

int main()
{

//创建指针变量p,并赋值为NULL
	int* p = NULL;
	
return 0;
}

//这个是c++的注释方式,还有一种注释的方式/* */
如下:



int main()
{
	//int a = 10;


	int a = 10;
	int b = 20;


	//创建指针变量p,并赋值为NULL
	int* p = NULL;

	return 0;
}
/*
int main()
{
	//int a = 10;


	int a = 10;
	int b = 20;


	//创建指针变量p,并赋值为NULL
	int* p = NULL;

	return 0;
}
*/

可以看到下面那个已经被注释掉了,这个注释方式是c语言的注释方式

那么你认为哪一种会比较好呢?
我的老师说都好,各有千秋,不过我比较喜欢//这一种
因为/* */这种注释不能嵌套

就像这样:

/*
int main()
{
	//int a = 10;


	/*int a = 10;
	int b = 20;*/


	//创建指针变量p,并赋值为NULL
	int* p = NULL;

	return 0;
}
*/

你可以观察到,我现在最外面加了/* */,又想在里面的

int a = 10;
int b = 20;

加一下注释/* */,但是没有实现,它不能嵌套(套娃)

梳理一下注释的作用:

  1. 注释可以梳理梳理
  2. 对复杂的代码进行解释
  3. 写代码的时候写注释,是帮助自己,帮助别人的

老师建议:
写代码的时候记得养成写注释的习惯,这对以后面试很有好处,也在工作中有便利,方便别人去理解,也可以给面试官一个好印象

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

打卡:4.9 C语言篇 -(1)初识C语言 - (5)字符串-转义字符-注释 的相关文章

  • 从外卖员到程序员,自学3年终于转行成功,三面“拿下”拼多多

    前言 先来自我介绍 老家农村 家里好不容易把我送到大城市读书 大学非985 211 但在我们老家 能出一个本科大学生也是非常不容易的 因为农村信息的相对闭塞 我对大学专业一无所知 加上分数并非前茅 最后被调剂一个我并不喜欢的专业 这里就不透
  • 机器配音在线工具有哪些? 让你的语音合成更自然

    你是不是也想成为一名大博主 随着现在的互联网时代蓬勃发展 出现了一批又一批的网红 在家里带带货 拍拍视频就能赚大钱 越来越多的人朝向网络世界进击 那么这些大博主制作一个爆款视频 必不可少的就是配音啦 但是其实很多博主用的并不是真人配音 而是
  • /lib64/libstdc++.so.6库缺失

    问题 lib64 libstdc so 6 version CXXABI 1 3 8 not found lib64 libstdc so 6 version CXXABI 1 3 9 not found lib64 libstdc so
  • The Planets:Venus

    靶场下载 The Planets Venus VulnHub 信息收集 arp scan l Interface eth0 type EN10MB MAC 00 0c 29 43 7c b1 IPv4 192 168 1 60 Starti
  • 华为OD机试真题-围棋的气-2023年OD统一考试(C卷)

    题目描述 围棋棋盘由纵横各19条线垂直相交组成 棋盘上一共19x19 361个交点 对弈双方一方执白棋 一方执黑棋 落子时只能将棋子置于交点上 气 是围棋中很重要的一个概念 某个棋子有几口气 是指其上下左右方向四个相邻的交叉点中 有几个交叉
  • 小白也能学会的创建Git仓库实操

    2024软件测试面试刷题 这个小程序 永久刷题 靠它快速找到工作了 刷题APP的天花板 CSDN博客 文章浏览阅读2 2k次 点赞85次 收藏11次 你知不知道有这么一个软件测试面试的刷题小程序 里面包含了面试常问的软件测试基础题 web自
  • SRC漏洞挖掘经验+技巧篇

    一 漏洞挖掘的前期 信息收集 虽然是前期 但是却是我认为最重要的一部分 很多人挖洞的时候说不知道如何入手 其实挖洞就是信息收集 常规owasp top 10 逻辑漏洞 重要的可能就是思路猥琐一点 这些漏洞的测试方法本身不是特别复杂 一般混迹
  • 白帽子如何快速挖到人生的第一个漏洞 | 购物站点挖掘商城漏洞

    本文针对人群 很多朋友们接触安全都是通过书籍 网上流传的PDF 亦或是通过论坛里的文章 但可能经过了这样一段时间的学习 了解了一些常见漏洞的原理之后 对于漏洞挖掘还不是很清楚 甚至不明白如何下手 可能你通过 sql labs 初步掌握了sq
  • Docker 安全必知:最佳实践、漏洞管理与监控策略

    容器安全是实施和管理像 Docker 这样的容器技术的关键方面 它包括一组实践 工具和技术 旨在保护容器化应用程序及其运行的基础架构 在本节中 我们将讨论一些关键的容器安全考虑因素 最佳实践和建议 容器隔离 隔离对于确保容器化环境的强大性和
  • C++ 中 const 和 constexpr 关键字解析:常量、函数和指针

    很多 C 的初学者看到 const 这个关键字的第一反应都是一头雾水 主要是因为 const 可 以出现在很多的位置 以及后面加入的 constexpr 更是常常感到困惑 今天就为大家一一解释出现它们的含义和以及作用 const 关键字 c
  • 编程和数值计算平台:MATLAB R2023a(Win/Mac)激活版

    MATLAB R2023a是一款强大的数值计算和科学编程软件 广泛应用于工程 科学和数学领域 win版 https soft macxf com soft 3541 html id MzE5MTM 3D mac版 https www mac
  • msyql 异常,别干着急,70%的问题都在这里!

    2024软件测试面试刷题 这个小程序 永久刷题 靠它快速找到工作了 刷题APP的天花板 CSDN博客 文章浏览阅读2 3k次 点赞85次 收藏11次 你知不知道有这么一个软件测试面试的刷题小程序 里面包含了面试常问的软件测试基础题 web自
  • 【计算机毕业设计】OA公文发文管理系统_xtv98

    近年来 人们的生活方式以网络为主题不断进化 OA公文发文管理就是其中的一部分 现在 无论是大型的还是小型的网站 都随处可见 不知不觉中已经成为我们生活中不可或缺的存在 随着社会的发展 除了对系统的需求外 我们还要促进经济发展 提高工作效率
  • 图片编辑软件有哪些好用的?这几款快收藏吧

    你有没有过这样的经历 精心拍摄了一组照片 却发现有些角度不对 光线不够好 或者想要给图片加上一些特别的滤镜效果来达到心目中的样子 这时 你就需要一款合适的图片编辑软件了 但是 市面上的图片编辑软件琳琅满目 哪一款才是适合自己的呢 别担心 今
  • 像素高低:影响照片质量、分辨率与细节表现的奥秘

    在数字摄影时代 像素成为了衡量照片质量的重要标准之一 那么 什么是像素 像素的高低又如何影响照片的质量 分辨率和细节表现呢 本文将为您揭开这个奥秘 首先 我们来了解一下像素的基本概念 像素 Pixel 是组成数字图像的基本单元 通常由字母
  • 如何正确下载激活NTFS for Mac2024最新版本?

    对于产品来说 更新换代是常有的事 很多软件在用户使用过后 会根据用户的使用需求以及一些客观需求 将软件进行改进 这样一个新的版本的软件就会出现 用户需要将软件进行更新才能享受最新的功能 使用更加完善的软件 所以我们一定要学会如何将软件进行更
  • 用栈实现队列(OJ中报错的处理)

    用栈实现队列 ERROR AddressSanitizer myQueueFree函数中栈的释放处现了问题 没有调用StackDestory而是直接free了 这个是栈初始化时 capacity与malloc申请的空间大小没有匹配 请你仅使
  • Python - 字典4

    复制字典 您不能简单地通过输入 dict2 dict1 来复制一个字典 因为 dict2 只会成为 dict1 的引用 对 dict1 的更改也会自动应用于 dict2 有多种方法可以复制字典 一种方法是使用内置的 copy 方法 示例 使
  • 【GRNN-RBFNN-ILC算法】【轨迹跟踪】基于神经网络的迭代学习控制用于未知SISO非线性系统的轨迹跟踪(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 2 1 第1部分 2 2 第2部分
  • 手把手教你使用HarmonyOS本地模拟器

    我们通过下面的动图来回顾下手机本地模拟器的使用效果 本期 我们将为大家介绍HarmonyOS本地模拟器的版本演进 并手把手教大家使用HarmonyOS本地模拟器 一 本地模拟器的版本演进 2021年12月31日 经过一个版本的迭代优化 随D

随机推荐

  • leetCode刷题---最大回文子串

    描述 给定一个字符串s 找到s 中最长的回文子串 你可以假设 s的最大长度为1000 示例1 输入 babad 输出 bab 注意 aba 也是一个有效答案 示例2 输入 cbbd 输出 bb 以某个元素为中心 分别计算偶数长度的回文最大长
  • cron表达式详解以及用Java自动生成cron表达式

    文章目录 cron表达式介绍 cron有如下两种语法格式 cron表达式标准结构 cron表达式各个字段的含义 cron每个域特殊字符含义 cron常用表达式例子 Java通过时间生成cron表达式 cron表达式介绍 cron表达式是由若
  • error:1407742E:SSL routines:SSL23_GET_SERVER_HELLO:tlsv1 alert protocol version

    git 项目出现这个错误是因为官方版本不支持tlsv1了 有相关公告 可以下载最新版本的git工具 吾已解决 奉上最新版本 点击可下载
  • 最新最新超详细MySQL安装及基本使用教程

    一 下载MySQL 首先 去数据库的官网http www mysql com下载MySQL 点击进入后的首页如下 然后点击downloads 然后选择MySQL Community GPL Downloads 等到下图 选择MySQL Co
  • 深度信念网络(Deep Belief Network)论文

    深度信念网络是深度学习爆发前夕重要的研究成果 以Hinton 2006年的两篇论文为代表 A fast learning algorithm for deep belief nets Reducing the dimensionality
  • Python 使用input获取用户输入

    视频版教程 Python3零基础7天入门实战视频教程 input 函数用于向用户生成一条提示 然后获取用户输入的内容 由于input 函数总会将用户输入的内容放入字符串中 因此用户可以输入任何内容 input 函数总是返回一个字符串 我们可
  • PDFBOX和ASPOSE.PDF

    一 aspose pdf 文档 https docs aspose com pdf java 1 按段落分段 docx文本按段分段 public static void main String args int i 1 try 打开文件流
  • Visual Studio (vs) 如何批量切换(更改)快捷键为IDEA或者其他IDE快捷键

    下载vs的快捷键映射文件 ReSharper Visual Studio vsk 放到 C Program Files Microsoft Visual Studio 2022 Enterprise Common7 IDE ReSharpe
  • java后台post请求json参数

    上代码 private static String resultPost String url String content StringBuffer lines new StringBuffer try URL restUrl new U
  • 【SQL管理】-Flyway数据库版本管理利器从入门到入味

    Flyway是什么 Flyway是独立于数据库的应用 管理并跟踪数据库变更的数据库版本管理工具 用通俗的讲 Flyway可以像Git管理不同人的代码那样 管理不同人的sql脚本 整个过程自动化 可回溯 安全可靠 易用高效 且对代码零侵入 非
  • Java dom4j类简介说明

    转自 Java dom4j类简介说明 下文笔者讲述dom4j类的简介说明 如下所示 dom4j是一个Java的XML API 类似于jdom 用来读写XML文件的 dom4j的下载 环境配置 DOM4J是开源组织提供的一个免费的 强大的XM
  • 预训练模型专题_Bart_论文学习笔记

    Bart模型作为一种Seq2Seq结构的预训练模型 是由Facebook在ACL 2020上提出 Bart模型的论文为 BART Denoising Sequence to Sequence Pre training for Natural
  • BurpSuite数据包的导出及导入

    说明 在使用BurpSuite时难免会出现中途要关闭burp可是需要保存当前的数据包记录 或者想要将当前的数据包记录分享给他人 那么就需要用到BurpSuite的导出和导入功能了 导出 这是我们浏览的数据包 现在将这些记录进行导出 点击Pr
  • K8S集群+负载均衡层+防火墙 实例

    实验拓扑图 实验要求 1 Kubernetes 区域可采用 Kubeadm 方式进行安装 2 要求在 Kubernetes 环境中 通过yaml文件的方式 创建2个Nginx Pod分别放置在两个不同的节点上 Pod使用hostPath类型
  • 详解#program

    C和C 的每个实现对它的主机或操作系统都支持一些独有的特征 例如 某些程序须对存放数据的存储器区域进行精确的控制 或必须控制特定函数接受参量的方式 pragma指令对每个编译器给出了一个方法 在保持与C和C 语言完全兼容的情况下 给出主机或
  • CSS——position属性

    absolute 生成绝对定位的元素 相对于 static 定位以外的第一个父元素进行定位 元素的位置通过 left top right 以及 bottom 属性进行规定 父元素必须有relative absolute才可以 fixed 生
  • 用数据告诉你出租车资源配置是否合理

    互联网 下不同时空如何建立合适的指标分析出租车 供求匹配 的程度 由于出租车供求匹配 以及一系列的补贴方案涉及到可行性的问题 我们采用出租车轨迹数据做出相应的解答 出租车上下客高峰期 查看不同城市的出租车上下客高峰期的时间段 从深圳市的上下
  • 【每日一题】最大利润 -python

    题目描述 商人经营一家店铺 有number种商品 由于仓库限制每件商品的最大持有数量是item index 每种商品价格是item price item index day 通过对商品的买进和卖出获取利润 请给出商人在days天内能获取的最
  • 性能测试指标(一)

    介绍性能测试的教程和文章比较多 总结性能测试的指标为多 快 好 省 多 并发数量 快 延时 响应时间 好 长时间运行 省 资源使用率 在介绍吞吐量直接先从几个大家熟知的概念说起 1 响应时间 响应时间为各个时间段往返时间之和 包括 用户客户
  • 打卡:4.9 C语言篇 -(1)初识C语言 - (5)字符串-转义字符-注释

    C语言篇 1 初识C语言 5 字符串 转义字符 注释 简介 纠正 字符串 转义字符 注释 简介 大家好 我是小奔 每天一笔记 从最基础开始写 展现我自己学习过程 如果感觉不错 就点一下关注啦 纠正 字符串 这一篇博客我们来了解一下字符串 看