[C语言] 初始字符串 & 转义字符与注释

1,209 阅读7分钟

​「这是我参与2022首次更文挑战的第6天,活动详情查看:2022首次更文挑战

字符串简介

"hello Cyuyan\n"

  • 这种由字符由双引号,引起来的一串字符被称之为字符串字面值,简称为:字符串 😀
  • 双引号不是字符串的一部分。双引号仅告知编译器它括起来的是字符串
  • 注:字符串的结束标志是一个反斜杠(\0)的转义字符。在计算机字符串长度的时候反斜杠(\0)是不算做字符串的内容当中的。
  • 说的简单一点的话:字符串就是一串字符,双引号括起来的一串字符。
  • 双引号不是字符串的一部分。双引号仅告知编译器它括起来的是字符 串,正如单引号用于标识单个字符一样。

证明字符串当中有\0

  • 字符串是一串字符也就是多个字符,多个字符要存起来的话就需要用到一个概念是:字符数组 — 数组是一组相同类型的元素
  • 那么我们就来证明下在字符串数组当中的字符串是不是会存在反斜杠(\0)
char arr[] = "hello C";

从这里可以看出总共有⑦个元素,这里本来只有⑥个字符的。其实这里在字符当中隐藏当中存放了一个反斜杠\0,在上面图中可以看到最后有'\0'.总的来说就是:字符串在结尾的时候隐藏了一个'\0'.

反斜杠(\0)是字符串当中的结束标志!

两种形式区别

用代码给大家看看:如下实例:

#include<stdio.h>
int main(void)
{
	char arr1[] = "helloC";
	char arr2[] = { 'h', 'e', 'l', 'l', 'o', 'c' };

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

    return 0;
}

  • 首先:用调试当中监视窗口给大家看看区别!

不知道大家发现没有当我们是arr1数组的时候在最后当中是有反斜杠(\0),但是当我们在arr2数组的时候它是没有反斜杠(\0)的。

  • 其次:再运行结果给大家看看区别!

从这里我们打印的结果当中可以看出来是不一样的,第一种我们打印的时候只打印helloC,第二种的时候在打印的时候后面出现了乱码!那么为什么在第二种的时候会出现这个。在第一个arr1数组当中存放的内存当中存放了**helloC\0,这就是我们arr1数组当中存放的内容。对于arr2数组里面的内容也是存放的内存块里面存放的是helloc,**大家注意下我那个粗体字的区别。当我打印的时候arr1数组是因为后面有一个反斜杠(\0)让字符串停下来了,而arr2数组当中没有反斜杠(\0)后面放的是什么我们是完全不知道的。所以,后面空间的内容是未知的。对于未知的内容,那我们打印的内容自然是不知道的从而打印出来了乱码。而arr1数组当中有反斜杠(\0)的时候那么就知道要停下来了。

  • 那么当我们主动给这个arr2数组字符串+上反斜杠(\0)的时候大家来看看结果:

    #include<stdio.h> int main(void) { char arr1[] = "helloC"; char arr2[] = { 'h', 'e', 'l', 'l', 'o', 'c','\0'};

    printf("arr1 = %s\n", arr1); printf("arr2 = %s\n", arr2); return 0; }

  • 运行结果:

这个情况又再次充分的证明了字符串的结束标志是反斜杠(\0),对于字符串来说它的结束标志是非常重要的,好好利用这一点可以让你的程序效果更上一层楼。

strlen库函数

strlen的作用是:计算字符串 str(要计算长度的字符串 的长度!

#include<string.h> 提供**strlen()**函数的原型。

string.h头文件包含多个与字符串相关的函数原型!

声明:size_t strlen(const char *str)

实际演示**strlen()**函数的用法 :

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

int main(void)
{
    char str[50];

    strcpy(str, "I always like C language");

    int len = strlen(str);
    printf("|%s| 的长度是:|%d|\n", str, len);

    return(0);
}

  • 当上面的代码被编译和执行时,它会产生下列结果:

  • 在这里有strcpy的函数作用: 复制字符串📗
  • 声明:char *strcpy(char *dest, const char *src)
  • dest – 指向用于存储复制内容的目标数组
  • src – 要复制的字符串
  • 注意:当我们用字符串函数求长度的时候反斜杠(\0)是不算长度的。

当然C语言还有大量的字符串函数,这个等以后会跟大家说的,现在我们知识初始即可!

转义字符

转义字符:其实就是转义了它原本的含义。转义字符是一种特殊的字符常量。转义字符以反斜线"\"开头,后跟一个或几个字符。转义字符具有特定的含义,不同于字符原有的意义,故称"转义"字符。

  • 我举个例子给大家看看:

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

上述代码就是我要举出的例子,接下来运行结果如下:

  • 本来我的'\t'是在printf()打印当中的,但是这个'\t'变成了其它的意思,当然转义字符不止一种意思,它包含了很多种不同的转义,接下来我再举一个例子给大家看看!
#include<stdio.h>
int main(void)
{
	printf("C:\nest\nest.c");
	return 0;
}

上述代码还是上面的代码,但是我把'\t'改成了'\n',运行结果如下:

  • 是不是如我所说:转义字符不一样它们起到的作用也是不同的!

常用的转义字符含义

注释

注释通常是用来解释复杂代码的,怎么说就是这个代码对于你来说是比较复杂的,你想了挺久的。如果我不去写注释的话,站在别人的角度上说或者会难以理解或者你过一段时间你再回来看自己原来打的代码,我又想不起来了当时是怎么来去写这段代码的。这个时候就应该写注释。

C语言有两种注释风格

  1. // - 一般用于单行注释。(这个一开始是C++的注释风格只不过后面又引用到了C语言上了)

  2. /* ... */ - 一般用于多行注释。

  • 这两种方法可能会有小伙伴们说哪一种注释的风格更好,在这里我认为第一种的更好。因为多行注释C的注释风格是有点缺陷的。C语言的注释风格是并不支持嵌套注释的,注释当中在去拥有了多行注释就是不行的。

注释的好处是:

  1. 提高了代码的阅读性,调试程序的重要方法。
  2. 注释是一个程序员必须要具有的良好编程习惯。
  3. 将自己的思想通过注释先整理出来,再用代码去体现。