C语言字符常量与字符变量..
1.字符常量
诸如’a’、‘b’、'c’这类的都归属于字符常量
而且我们都知道printf()函数接收的第一个参数是字符串 所以不能够直接将字符常量作为printf函数的第一个参数
并且字符常量对应的占位符为%c
以下是对字符常量的演示
int main(){
printf("%c%c%c%c", 'a', 'b', 'c', '\n');
return 0;
}
2.字符类型占用的字节大小
1.字符常量占用的字节大小
在C语言中 对字符常量使用sizeof 那么字符类型会自动提升为int类型 那么检测的就是int类型的字节大小
int main(){
printf("%zu\n", sizeof('a'));// 4
return 0;
}
但是在C++中 打印的结果是1 也就是能够正确打印出char类型所占用的字节大小
本质上就是如果采用了C++编译器的话(visual studio文件的后缀名为cpp) 那么就可以正确获取结果
如果采用的是C编译器的话(visual studio文件的后缀名为c) 那么打印的就是int类型所占用的字节大小
2.字符变量占用的字节大小
那么如果检测的对象变成了字符变量的话 那么就可以正确获取字符类型占用的字节大小
int main(){
char ch = 'a';
printf("%zu\n", sizeof(ch));// 1
return 0;
}
3.整数与字符的对应关系–ASCII
如果我们将前面打印字符的占位符换成%d的话 那么结果会是什么呢
int main(){
printf("%d %d %d\n", 'a', 'b', 'c');// 97 98 99
return 0;
}
可以发现 结果是一堆整数
其实这些整数就是ASCII码表中所打印字符对应的十进制数值 也是储存在计算机中的字节
打印的结果是字符还是ASCII码表中字符对应的数值 取决于占位符是%d还是%c
4.字符串常量
诸如"HelloWorld"之类的称之为字符串常量
int main(){
printf("%zu\n", sizeof("HelloWorld"));// 11
return 0;
}
可以看到 打印的结果是为11 比HelloWorld这个字符串常量的长度多1 那么多出来的1如何解释呢
原来在C语言中 字符串结尾会有一个数值0以标志字符串的结束
1.字符0和数值0
在这边特意讲一下的目的是为了区分他们两个 字符0对应的数值是48 和数值0的差别还是很大的
int main(){
printf("%d %d\n", 0, '0');// 0 48
return 0;
}
5.转义字符
int main(){
printf("Hello\0World");
return 0;
}
结果只打印了Hello 因为他认为这个字符串到\0就结束了 事实也是如此 我们前面说过了字符串是以数值0作为结尾的 那么’\0’和0肯定是由什么联系的
诸如’\数值’之类称为转义字符 该数值为八进制形式
那么前面所讲的’\0’其实就是一个转义字符 他在ASCII码表中对应的就是数值0 两者是等价的关系
既然我们已经知道转义字符的格式是’\八进制数值’ 那么我们可以尝试一下通过转义字符打印"Hello"这个字符串
int main(){
printf("\110\145\154\154\157\n");// Hello
return 0;
}
可以看出 Hello被我们正确打印出来了
但是我们平常见到过换行符是以’\n’的形式存在的 这又是为什么?
其实就是因为数值格式存在的转义字符比较难以记忆 所以就通过一些字母进行替代 方便记忆
int main(){
printf("\12\n");// 打印了两个换行
return 0;
}
可以看到\12和\n的效果是一样的 都展示了换行的效果
以下是一些常见的字母格式的转义字符
有一些字符无法在键盘上体现 这被称为不可见字符 在ASCII码表中体现为前32个字符(数值0-31)
在这些不可见字符中 不是全部都有字母格式的转义字符 有些需要查表获取八进制数值以表示转义字符