一、字符
1.什么是字符串
2.字符串拥有结束标志
1.先来将一个字符串存入数组并打印
例:
int main()
{
char arr1[] = "abc";
//字符串存入数组
printf("%s\n", arr1);
return 0;
}
运行结果:
2.要是将{‘a’,‘b’,‘c’}存进数组再打印呢?为什么会出现这种情况?
int main()
{
char arr1[] = "abc";//数组
char arr2[] = { 'a','b','c' };
printf("%s\n", arr1);
//%s是以字符串输出
printf("%s\n", arr2);
return 0;
}
运行结果:
3.进行调试:
通过监视窗口发现数组arr1和arr2的区别是——arr1的值后面多了一个0(‘\0’)
那我们为arr2的后面也加上一个0(‘\0’)
运行结果:
这是为什么呢?
arr1打印的是使用双引号引起来的字符串,而arr2打印的是单引号引起来的几个字符而非字符串(本文补充了双引号单引号引用字符的区别,见文章末),为arr2添加了字符串的结束标志才能正确打印abc。
字符串有个隐藏的/0,是字符串结束的标志,/0字符为0(/0也是转义字符),如果字符串之后没有‘/0’就会打印随机值。/0的值为0。
*注:‘/0’在字符串中占1字节
4.字符的对应值与ASCII表
ASCII常识:
相邻大写字母之差是1,同字母大小写差是32。
3.strlen()计算字符长度
1.利用strlen()计算字符长度需要“打个招呼”,需要头文件
#include<string.h>
2.我们来计算一下刚刚的arr1和arr2的长度
#include<stdio.h>
#include<string.h>//这部分代码特意加上了使用该函数的头文件
int main()
{
char arr1[] = "abc";
char arr2[] = { 'a','b','c'};
printf("%d\n", strlen(arr1));
//%d以十进制整数输出
printf("%d\n", strlen(arr2));
return 0;
}
运行结果:
计算字符串长度是从字符串开始,到’\0’结束,所有字符的个数,不包括’\0’本身。所以arr1的长度为3。
而arr2没有结束标志,它的长度不固定,所以输出的长度是随机的一个值。
*注:
尽管’\0’不算入字符串的长度,但它占用一个字节的存储空间。
‘0’是一个字符,与’\0’是完全不同的概念。
4.转义字符
例:
答:13。
c: - - 2字符没有问题
\t - - 转义字符,字符字符就是一个字符所以是1
est - - 3字符
\t - - 1字符
est.c - - 5字符
那么\32为什么也是一个字符呢?
\32 - - \32是上面\ddd的形式
所以3和2是两个八进制数字,32是十进制转来的八进制数字,要再把32变回十进制。
32转十进制→3 * 8 ^ 1 + 2 * 8 ^ 0=26再查ascii表,对应→,所以是一个字符。
2+1+3+1+1+5=15
5.注释
1.注释的作用:以后维护或查看程序时候,知道这段代码是干什么用的。
2.怎么注释:
这样注释是不可以的:
/ * 以遇到的第一个 * /为准作为注释
补充*:
1.单引号和双引号的细节区别
单引号在字符常量时使用,表示单个字符。当在单引号中出现两个及以上字符时或没有字符时,编译出错。
例:
char c = ‘aA’; // 编译出错,单引号只能是一个字符
char c = ‘’; // 单引号中间没有任何字符时,编译出错
双引号在表示字符串常量时使用,可以表示0到多个字符组成的字符串。
char s1[] = “a”;
char s2[] = “a1A”;
char s3[] = “”; // 双引号中间可以没有任何字符,表示空字符串
单引号和双引号如何在程序中表示和输出自身呢?
和其它特殊字符一样,使用转义方式。
char c1 = ‘’’ ; // 单引号字符
char c2 = ‘"’; // 双引号字符
同理,字符串中输出引号也是一样,直接使用转义方式表示。
总结:
1.字符常量使用单引号,字符串常量使用双引号表示
2.两者均支持转义字符表示。
‘A’ 表示单个字符大写字母A,占用1个字节空间
“A” 表示字符串,该字符串只有1个大写字母A组成,占用2个字节空间,每个字符串末尾自动会加上一个空字符 ‘\0’
空字符常量使用转义符号 '\0’表示,空白字符串使用双引号表示 “”
2.调试流程
Step1:
Ctrl+F10
Step2:
调试—>窗口—>监视—>监视
Step3:
监视中输入变量名
Step4:
F10一步步运行观察