双引号引入的是一个字符串,单引号引入的是字符,字符串可以是多个字符,也可以没有字符,这就是空字符串,字符串打印格式可以是%s,也可以直接打印
2024.5.22添加:常量字符串不可修改
例如:char* p = "abc"
:不可通过指针修改该字符串,该字符串存放在常量区
int main
{
'a'//字符
"abc"//字符串
""//什么都不引,就是空字符串
printf("%s\n","Hello World");
printf("Hello World\n");
return 0;
}
字符串末尾隐藏了\0,\0是字符串的结束标志
可以看到第一个直接定义字符串的会有一个 \0 的位,第二个没有,他们运行的时候,字符串在打印的时候,碰到 \0 才会停止打印,因为第二个后面没有跟 \0 ,所以会打印乱码,一直出现 \0 才会停止
如果字符串中间就有 \0 ,那么打印便会在 \0 处停止
类似 \0 与 \n 都是转义字符,就是加上“\”以后不再是原来的意思,例如 \n 就是换行的意思。
第三个字符串中间碰到了\n就换行再打印
\ddd表示8进制表示的数,130为8进制,表示成十进制就是88,ASCII码值为88对应的字符就是大写X,\ddd表示的数字是ASCII码值,所以大小有限制,大于等于400(8进制)就会报错,因为没有那么大的ASCII码值,而且\ddd只占一个字符长度
int main()
{
char ch = 48;//这时为数字
printf("%d\n", ch);
printf("%c\n", ch);//输出为0
char dh = '\009';//当不符合8进制转义规则的时候,加上单引号为字符,于是输出的%d就是9字符的ascii值
printf("%d\n", dh);//9对应的ascii值为57,所以输出57
printf("%c\n", dh);
char eh = '\060';//当符合8进制转义规则的时候,eh就相当于数字48
printf("%d\n", eh);//9对应的ascii值为57,所以输出57
printf("%c\n", eh);
char fh = '0';//这个也是字符0,%d就输出ASCII值48,%c就输出字符0,相当于上面赋值字符9一样
printf("%d\n", fh);
printf("%c\n", fh);
return 0;
}
从上述代码运行结果便可以得到
第一个,当变量为数字的时候%d输出为数字,%c输出ASCII码对应的字符,字符输出为空,因为ASCII值无法显示,换成48,输出字符就是0。
第二个,当不符合8进制转义规则是,因为加上了单引号,便被赋值成了字符,以数字输出便是他的ASCII码,以字符输出便是他本身,字符9。
第三个,当符合8进制转义规则时,便被赋值为数字,输出字符便是他的ASCII码值对应的字符。
第四个,直接加单引号,直接赋值字符0,输出数字就是这个字符的ASCII码,输出字符就是它本身。
单引号表示8位二进制位。
第一行123456转换位16进制为1E240,只取最后八位40,40的十进制就是64,然后输出“@”。
第二行就是Ascll值64的符号就是1
第三行,当引号引两个数字,就将两个数字的Ascll码值拼接起来,4的Ascll码为52,9的Ascll码为57,52对应16进制为34,57对应16进制为39。截取最后八位,Ascll码就是57,因为是%c输出,所以输出57对应的字符就是‘ 9 ’。
第四行输出16进制数字就是3439,就是两个Ascll拼接的数字。
第五行和第四行的相同就是把进制换了。
第六行就是9对应的Ascll码,就是57。
最后得出结论,单引号会把内部的字符进行拼接,如果一位就不变,两位就转化为了short,三位就是int类型了,最后根据输出类型进行截断。
for循环在刚开始进入循环的时候,会对刚开始的赋值进行判断,符合条件就进入循环,下一次循环会先运算,然后再判断
第一个在运算到34的时候就跳出来了,然后打印了34,第二次不符合条件,没有打印,然后继续打印,i为第二次赋值的32
*
*
*
代码:
https://gitee.com/hungry_11/summer-language-training/tree/master/7.20/7.20_1