写在前面:
今天我们要学习的是C语言中的字符串以及转义字符,下面我们一起来对这方面的知识结合代码进行探究.
一.字符串
什么是字符串呢?
"hello bit" 形如这样使用双引号引起来的一串字符就称之为字符串字面值,简称为字符串.
需要注意的是: 字符串的结束标志是一个\0的转义字符.在计算字符串长度的时候\0是结束标志,不算作字符串内容.
这里就很有必要提到字符数组:
数组就是用来存放一组相同类型的元素,而字符数组就是存放若干字符的数组.
形如 char arr[] = "hello"; 这样就可以称之为字符数组
从字面意义来看的话,该数组中保存了hello5个字符.但是通过调试发现该数组中有6个字符,包含一个隐含的\0. 这里\0的作用是用来表示字符串的结尾.
形如 char arr[] = {'h','e','l','l','o'};这样的同样也称之为字符数组,两种形式到底有什么区别呢?
可以使用下面的代码进行一下测试:
解析:
由此可以得知,第一种形式字符串会包含隐含的\0也会占据一个字节,而第二种形式则不会包含.
为什么第一种形式计算的值是5,而第二种形式的值却是21呢?为何反差如此之大呢?
解析:strlen函数遇到\0则会停止计算,第一种形式有隐含的\0.而第二种则没有,因此第二种形式会一直向后遍历,直到遇到\0才会停止.而此时后面内存中的值是不确定的,因此最后计算的值也是随机值.
二.转义字符
像平时我们使用电脑存储文件的时候,每个文件都有对应的存储路径.而如果我们需要将路径打印出来的时候,比如:C:\code\test.c 这样一个目录,我们又该如何去写代码呢?
#include <stdio.h>
int main() {
printf("C:\code\test.c\n");
return 0;
}
这样写对吗?下面试一试就便知
很显然从上面的结果可以得知是错误的.
因此这里就不得不说一说转移字符了,转义字符顾名思义就是转变意思.
常见的转义字符:
转义字符 | 释义 |
\? | 在书写连续多个问号时使用,防止被解析成三字母词 |
\' | 用于表示字符常量' |
\" | 用于表示一个字符串内部的双引号 |
\\ | 用于表示一个反斜杠,防止被解释为一个转义序列符 |
\a | 警告字符,蜂鸣 |
\b | 退格符 |
\f | 进纸符 |
\n | 换行 |
\r | 回车 |
\t | 水平制表符 |
\v | 垂直制表符 |
\ddd | ddd表示1~3个八进制的数字.如:\130 |
\xddd | ddd表示3个十六进制数字.如\x030 |
问题1:在屏幕上打印一个单引号',应该怎么写呢?
#include <stdio.h>
int main(){
prinntf("%c\n",'\'');
return 0;
}
问题2:在屏幕上打印一个字符串,字符串的内容是一个双引号",应该怎么做呢?
#include <stdio.h>
int main() {
printf("%s\n","\"");
return 0;
}
笔试常见题:
我们要先说一说strlen函数:
strlen函数的作用是用来求字符串中字符个数,遇到\0则停止计算.
第2个printf语句深度剖析:
\t会被转义为水平制表符,\69会被转义为6所对应的字符和数字9,因为数字9并不能表示9进制.6则会按照8进制转换为10进制对应的字符.
三.注释
我们平时在学习的过程中肯定会去写很多的代码,在测试的过程中有些代码可以反复使用,但是有些代码在不需要的时候则需要删除,但是删除的话又比较可惜(毕竟是自己辛辛苦苦一个字符一个字符敲出来的).因此,代码中有不需要的代码我们可以先注释掉,或者代码中有些代码比较难懂,我们也可以加文字注释起来,而同时不影响代码的编译运行,而又美观.
对代码进行适当的解析,使代码更加简明扼要.
#include <stdio.h>
//两数求和函数
int add(int a, int b) {
return a + b; //返回两数之和
}
int main() {
int a = 3, b = 4; //定义两个变量
int ret = add(a, b); //调用求和函数,获取返回值
printf("ret = %d\n", ret); //输出求和函数的返回值
return 0;
}
注释掉代码的两种风格:
- C语言风格的注释: /* xxxxx */ 缺陷:不能嵌套注释
- C++风格的注释: // xxxxxx 优点:可以注释一行,也可以注释多行
VS编译器中注释代码的快捷键:
注释掉代码: 选中需要注释掉的代码,然后 ctrl+k+c
放开注释掉的代码: 选中需要放开的代码,然后 ctrl+k+u
今天用到了sizeof以及strlen两个函数,而这两个函数很容易混用,所以下一篇博客会特别拿出来讲一下这两个函数的区别.
锲而不舍,朽木可折. -------- 荀子<<劝学>>