文章目录
- 1、字符串
- 2、转义字符
- 3、注释
1、字符串
#include<stdio.h>
int main()
{
'a';//字符
"abcd";//字符串
return 0;
}
"abcd"这种由双引号(Double Quote)引起来的一串字符称为字符串字面值(String Literal),或者简称字符串。
如何打印字符串:
图一
分析:char是字符类型,C语言中没有字符串类型。所以我们要引入一个数组,数组是一组同类型的元素,创建字符数组arr,方括号中的大小可写可不写,当方括号中没有写大小是,会自动根据反括号后面的内容来初始化方括号的大小。我们要如何知道方括号中的元素有多少呢?按F10调试,再按F10开始调试,调试-窗口-监视-4个监视任意选择。
图二
图三
在监视窗口中可以看到arr1有一个\0,由此可见字符串在结尾隐藏了一个\0字符。注:字符串的结束标志是一个 \0 的转义字符。在计算字符串长度的时候 \0 是结束标志,不算作字符串内容。
\0 的重要性
我们这里有三组数组,看图三我们打印三组数组会发现,arr1和arr2字符个数不一样,arr1比arr2多了一个\0,看图一,我们把他们打印出来会发现打印结果也不一样,arr1在打印的时候遇到隐藏的\0字符就会结束,所以打印出来的结果是abcd,而arr2在打印的时候没有遇到\0字符所以他就不会停止,我们在arr2的基础上给他加上一个\0字符就是我们的arr3,我们会发现不论是字符个数还是打印结果arr1和arr3都是一样的。
换一种方法继续验证\0的重要性
我们这里运用了strlen(string length)函数,这是一个求字符串长度的函数,使用这个函数的时候必须包含他的头文件头文件 string.h,不然无法运行。
看打印结果我们会发现arr1和arr3的打印结果为4,为什么不是5呢?因为在这里\0是一个结束标志,在计算字符串长度的时候不计算在内,所以是4不是5。我们会发现arr2打印出来是16,这里arr2的数组长度是一个随机值,因为当数组在计算的时候没有遇到\0结束标志符的时候会继续运行知道遇到\0才会停止。这里再一次的体现了\0的重要性!
2、转义字符
转义字符顾名思义就是转变意思。
#include <stdio.h>
int main()
{
printf("c:\test\test.c");
return 0;
}
打印结果为:
分析:因为这里\t为转移字符,所以打印路径的时候一定要用\\
转义字符表
转义字符 | 释义 |
| 在书写连续多个问号时使用,防止他们被解析成三字母词 |
| 用于表示字符常量’ |
| 用于表示一个字符串内部的双引号 |
| 用于表示一个反斜杠,防止它被解释为一个转义序列符。 |
\a | 警告字符,蜂鸣 |
\b | 退格符 |
\f | 进纸符 |
\n | 换行 |
\r | 回车 |
\t | 水平制表符 |
\v | 垂直制表符 |
\ddd | ddd表示1~3个八进制的数字。 如: \130 X |
\xdd | dd表示2个十六进制数字。 如: \x30 0 |
这边主要讲一下\ddd 和\xdd两个转义字符。
\ddd 和\xdd中的d分别表示八进制和十六进制。
#include <stdio.h>
int main()
{
printf("%c\n",'\130');
return 0;
}
打印结果:
分析:
我们打印的130是个八进制数,转换成十进制是88。
130(八进制)=64+23+0=88,ASCII码值中88对应的就是X。
#include <stdio.h>
int main()
{
printf("%c\n", '\x63');
return 0;
}
打印结果:
分析:
我们打印的60为十六进制数,转换成十进制是96。60(十六进制)=96+3=99,ASCII码值中99对应的就是c。
- '0’对应的ASCII码值是48
- 'A’对应的ASCII码值是65
- 'a’对应的ASCII码值是97
我们发现大写字母和小写字母对应的值总是相差32
下面是一道笔试题
分析:
其中strlen函数是一个求字符串长度的函数,\t,和\62为转义字符,其中的8不是八进制,8进制的数字是0-7不包含8。
补充:
%d - 打印整型
%c - 打印字符
%s - 打印字符串
%f - 打印float类型的数据
%lf - 打印double类型的数据
%zu - 打印sizeof的返回值
3、注释
- 代码中有不需要的代码可以直接删除,也可以注释掉
- 代码中有些代码比较难懂,可以加一下注释文字
- 注释有两种风格:
- C语言风格的注释
/*xxxxxx*/
缺陷:不能嵌套注释 - C++风格的注释
//xxxxxxxx
可以注释一行也可以注释多行