目录
字符串的赋值
第一种整体赋值:
第二种单个元素赋值:
第三种指针法:
输出的形式:
常见转义字符:
它们具体的使用方法:
?
\`
\"
\\
\a
\ddd
\xdd
注意:以上用法为常用转义符,没有全列出
字符串的初始赋值两种:
char a[]={"good morning"};//因为保存的是字符型的变量所以数组用char来定义;
char b[]="good morning";//可以不加{}
这种形式会在最后一个字符的末尾加'\0',是以'\0'结尾的;
如果定义的字符长度小于数组的下标,则其他元素自动为'\0';
空格也算一个字符;
如果用这种方法来定义字符串,则定义的字符个数要少数组的下标,因为在末尾会自动加'\0';(当然'\0',也是会占一个字符的位置;'\0'为转义字符 null(空))
编译器会在末尾自动添加'\0'是为了清楚,该字符串是在那里结束。'\0'作为字符串结束的标志。(具体为什么下面的多维数组讲解)
注:空格和'\0',并不是同一个东西。空格是字符;ASCII码是32,而'\0'是转义字符;ASCII码是0
char a[]={'g','o','o','d'};//这种形式必须带花括号{};
char a[]={'g','o','o','d'};//这种形式必须带花括号{};
这种形式末尾是没有'\0';的,相当于对数组中的每一个元素进行赋值。
能定义的字符个数就等于数组的下标值;(这种形式更准确的来说应该叫字符数组)
char *p="hello";//定义一个指针指向一个字符串;
printf("%s",p);//输出字符串;
printf("%c",*(p+i));//单个字符输出;
指针p指向字符串的首地址,如果需要调用可以*(p+i)这种形式取其中的元素;或直接p输出这个字符串;
1.在图1arr1变量等号后字符串\0结尾的存在(程序中省略)向内存申请6+1空间,但\0不算作字符串内容。
2.在arr2变量中由于等号后不为字符串,所以必须在'f'后添加'\0'字符,否则将无结束标志,会有乱码
此图为图1修正后,则乱码不会存在。
若使用strlen操作符计算其字符串长度则\0不算
注:使用strlen时比必须在程序前加上#include
转义字符 | 释义 |
---|---|
? | 在书写连续多个问号时使用,防止他们被解析成三字母词 |
\` | 常见用于表示字符常量 |
\" | 用于表示一个字符产内部的双引号 |
\\ | 用于表示一个反斜杠,防止它被解释为一个转义序列符 |
\a | 警告字符,蜂鸣 |
\b | 退格符 |
\f | 进纸符 |
\n | 换行 |
\r | 回车 |
\t | 水平制表符 |
\v | 垂直制表符 |
\ddd | ddd表示1~3个八进制的数字。如:\130X |
\xdd | dd表示2个十六进制数字。如:\x30 0 |
在某些编译器下 ,会将 “ ??) ” 解析成 三字母词 “ ] ” ,
所以在打印 “ ??) ”时,为了防止被解析成三字母词,在它前面加 " \",改成 ” \??) “ 。
像这样打印单引号时会造成编译器无法编译:
printf("%c",''');
在 ’ 前面加 \ 将它转义就可以打印出来了,
printf( "%c",' \' ');
与 \` 用法相同,这里就不再赘述了。
用来表示一个反斜杠,防止它被解释为一个转义符,
当你想打印一个文件路径时,如果直接这样写:
printf("c:\test\test.c");
这是因为 \t 会被编译器解析为水平制表符,
正确的写法是在 \ 的前面加 \ 进行转义, 防止被解析为 \t,
printf("c:\\test\\test.c");
在打印 \a 时触发电脑上的蜂鸣器.。
printf("\a");
ddd表示1-3个八进制的数字。将ddd三个数字转换成十进制,十进制数对应的ASCAII就是结果。
猜一猜下面的代码打印出的是什么?
printf("%c",'\130');
因为输出结果为字符型,将八进制数字130转换为十进制为88,然后输出对应ASCII码表的字符X。
如果输出类型为整型,打印的结果就是八进制130转换为十进制的结果
像这样:
printf("%d",'\130');
最后结果为88,正好对应ASCII表中的X
注意:超过了ascall码的范围,编译器就会报错。另外大于三位,或者遇到非八进制数字时则转换结束,直接取末尾数字。
同样首先要了解的是dd表示2个十六进制数,
猜一猜下面的代码打印出的是什么?
printf("%c",'\x30');
为什么是0呢?
因为输出结果为字符型,将十六进制数字30转换为十进制为48,然后输出在ASCII表中对应的字符 0。
同样的,如果输出类型为整型,打印的结果就是十六进制30转换为十进制的结果。
printf("%d",'\x30');
最后结果为48对应ASCII表中的0
后续会更新.......