1.字符串类型
"hello boys and girls. \n"
这种由双引号(Double Quote)引起来的一串字符称为字符串字面值(String Literal),或者简称字符串。
如下:
• 例子1
1 //字符串类型
2 #include <stdio.h>
3 int main()
4 {
5 "abcdef";
6 "";//空字符串
7 return 0;
8 }
• 例子2
代码1
1 #include <stdio.h>
2 int main()
3 {
4 char arr1[] = "abc";//如果要把这一串字符串存起来-数组
5 char arr2[] = { 'a','b','c' };//字符放单引号中
6 printf("%s\n", arr1);
7 printf("%s\n", arr2);//在abc后面还会打印出一些,奇怪的字符
8 return 0;
9 }
代码2
1 #include <stdio.h>
2 int main()
3 {
4 char arr1[] = "abc";
5 //"abc"——{'a','b','c','\0'},'\0'——字符串的结束标志
6 char arr2[] = { 'a','b','c' ,0};
7 //0换成'\0'同样可以,如果没有加就会打印随机字符
8 printf("%s\n", arr1);
9 printf("%s\n", arr2);
10 return 0;
11 }
注:字符串的结束标志是一个\0 的转义字符。在计算字符串长度(strlen函数)的时候\0 是结束标志,不算作字符串
内容。
补充:数据在计算机上存储的时候,存储的是二进制,#ah$这些字符怎么将其存到内存里,并变成二进制呢?——给字符编一个号,如a对应97,A - 65,……,像这样给每一个字符编了一个值的编码方式就叫ASCII 编码,字符所对的值叫ASCII码值,这些值汇成ASCII表,其中\0对应的就是0(\0是一个字符)
• 例子3
1 #include <stdio.h>
2 int main()
3 {
4 char arr1[] = "abc";//3
5 char arr2[] = { 'a','b','c' };//15——这是一个随机值
6 printf("%d\n", strlen(arr1));
7 //strlen-string length-计算字符串长度的
8 printf("%d\n", strlen(arr2));
9 return 0;
10 }
2.转义字符
- 例子1
1 #include <stdio.h>
2 int main()
3 {
4 printf("abcn");//abcnPress any key to continue……
5 return 0;
6 }
当在b与n中加入一个\时(打印出来就换行了)
1 int main()
2 {
3 printf("abc\n");//abc
4 system("pause");
5 return 0;
6 }
- 例子2(这里打印出来的□有问题,本来应该是→的,本人没有找到原因,希望看到这个地方的小伙伴有知道的可以留言指点一下。),因为\32转为8进制后是26,是一个“→”。
1 #include <stdio.h>
2 int main()
3 {
4 printf("c:\test\32\test.c");
5 //\t——水平制表符
6 return 0;
7 }
这里就不得不提一下转义字符了。转义字符顾名思义就是转变意思,改变其原来的意思或变成其本来的意思。
下面看一些转义字符
下面被挡住的是:“dd表示2个十六进制数字。 如: \x30 0”
转义字符的应用:
• 应用1
1 int main()
2 {
3 printf("c:\\test\\32\\test.c");
4 return 0;
5 }
• 应用2
打印出来a
1 int main()
2 {
3 printf("%c\n", 'a');
4 return 0;
5 }
//但是将a换成'时就是就会报错,因为会与前面的单引号形成一对,从而无法打印单引号',此时利用转义字符"\'"便可以化解这个问题
1 int main()
2 {
3 printf("%c\n", '\'');
4 return 0;
5 }
同理应用于双引号。
一个笔试题:下面代码输出的字符串长度应该是多少?——13(考察关于“\ddd”的转义字符)
1 #include <stdio.h>
2 int main()
3 {
4 printf("%d\n", strlen("c:\test\32\test.c"));
5 //\32——32是个8进制数字,其中\382是不能放进去的,因为8进制没有8
6 //32作为8进制代表的那个十进制数字,作为ASCII码值,对应的那个字符
7 //32转化为10进制:26,然后26作为ASCII码值代表的字符,即\32是作为一个转义字符算一个长度
8 return 0;
9 }
同理应用于\xdd,如\x61:转为10进制为97,在ASCII表中对应的字符为a。
问题:以下两个代码输出的结果相同都是a,那他们的区别是什么?
• 代码1
1 int main()
2 {
3 printf("\x61\n");
4 return 0;
5 }
• 代码2
1 int main()
2 {
3 printf("%c\n", '\x61');
4 return 0;
5 }
3.注释
- 代码中有不需要的代码可以直接删除,也可以注释掉
- 代码中有些代码比较难懂,可以加一下注释文字
• C语言风格的注释 /xxxxxx/
缺陷:不能嵌套注释(即到了*/就结束了)
• C++风格的注释 //xxxxxxxx
可以注释一行也可以注释多行