常量、字符串和转义字符
常量
字面常量
直接写出的值,如:2、3.14、1.2234等
const修饰的常变量
具备常属性的变量(本质上是个变量),只能在定义时修改其值。
const int n = 10;
int arr[n] = {0}; //此处尽管n具备常属性,但因其本质是个变量,所以不能用于定义数组大小
#define 定义的标识符常量
标识符常量,用符号代替的常量。(本质上是常量,只是为了方便书写而用符号代替常量。)
#define N 10
...
int arr[N] = {0}; //此处N是常量,可以定义数组大小
枚举常量
用来表示可以一一列举出来的常量(有值),如性别:男、女、保密 三原色:红、黄、蓝等。
枚举关键字:enum
enum Sex
{
male,//值为0
female,//值为1
secret//值为2
};//male, female,secret就是枚举常量,其值可通过%d的格式输出。
int main()
{
enum Sex Zhangsan = male;//枚举变量Zhangsan的取值只能是male, female,secret其中一个。
printf("%d",Zhangsan);
return 0;
}
字符串和转义字符
字符串
字符串就是由双引号引起来的一串字符,字符数组是由字符元素组成的数组。字符串可以存放在字符数组中,但要注意字符串存储在数组中时,系统会在数组中字符串结尾加上‘ \0 ’作为字符串结束的标志,(用strlen()函数求字符串长度时,‘ \0 ’只是字符串结束的标志,不是字符串内容,即此时统计数组中元素的个数或输出字符数组中元素时不包括‘ \0 ’,用其他方法则可能会统计‘\0’)。
//strlen()函数可用来计算字符数组的长度。
char arr1[] = "abc";
char arr2[] = {'a', 'b', 'c'};
//求一下字符串的长度
printf("%d\n", strlen(arr1));//结果为3
printf("%d\n", strlen(arr2));//结果为15 15是随机值(>=3),只有当系统遇到arr2中的第一个'\0'时才结束统计,而arr2中abc后面的的内容是随机的,所以统计到的数组长度也是随机的。
//打印字符串
printf("%s\n", arr1);//abc
printf("%s\n", arr2);//abc烫烫烫bc abc后面的乱码就是缺少'\0'导致的。
//'\0'转义字符对应的数字为0,因此可将上式代码略微调整即可输出同样的结果。
char arr1[] = "abc";
char arr2[] = {'a', 'b', 'c',0};//或者char arr2[] = {'a', 'b', 'c','\0'};
printf("%d\n", strlen(arr1));//结果为3
printf("%d\n", strlen(arr2));//结果为3
printf("%s\n", arr1);//abc
printf("%s\n", arr2);//abc
转义字符
- 转变了字符原来的意思,具备特殊作用的字符。
如:’ \0 ‘是空字符,常用作字符串结束的标志 , ’ \n ‘作用是换行
转义字符 | 意义 |
---|---|
\a | 响铃(BEL) |
\b | 退格(BS) ,将当前位置移到前一列 |
\f | 换页(FF),将当前位置移到下页开头 |
\n | 换行(LF) ,将当前位置移到下一行开头 |
\r | 回车(CR) ,将当前位置移到本行开头 |
\t | 水平制表(HT) |
\v | 垂直制表(VT) |
\’ | 表示单引号 ’ |
\" | 表示双引号 ‘’ |
\\ | 表示反斜杠 \ |
\ddd | ddd表示1~3个八进制数字,\ddd表示ddd转化为十进制数值后ASCII码表中所对应的转义字符 如\130表示字符’ X ’ |
\xdd | dd表示2个十六进制数字,\xdd表示dd转化为十进制数值后ASCII码表中所对应的转义字符 如\x58也表示字符’ X ’ |
- 思考:如何用printf输出单引号,双引号?(正常编写代码时单双引号以及一些带有反斜杠的符号总会被解析成语法成分或转义字符,而不是被解析成字符。为了避免编译器错误解析,需在所输出的字符前加上反斜杠’ \ '来防止字符被解析成语法成分或转义字符)
printf("%c\n", '\'');//输出结果为 '
printf("%c\n", '\"');//输出结果为 "
printf("%s\n", "'");//输出结果为 '
printf("%s\n", "\"");//输出结果为 "
printf("c:\\test\\test.c\n");//输出结果为 c:\test\test.c
- 在计算字符数组长度或输出字符数组时,转义字符整体算作一个字符,并起着特殊的作用。
printf("%d\n", strlen("c:\test\328\test.c"));
//输出结果为14 统计的14个字符分别是‘c’ ‘:’ ‘\t’ ‘e’ ‘s’ ‘t’ ‘\32’ ‘8’ ‘\t’ ‘e’ ‘s’ ‘t’ ‘.’ ‘c’
printf("c:\test\328\test.c");
//输出结果为"c: est→8 est.c" 其中‘\t’表示制表符,‘\32’表示‘→’
编译器不同,同一个\xdd或\ddd输出的结果会存在差异。