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的效果是一样的 都展示了换行的效果

以下是一些常见的字母格式的转义字符
C语言字符常量与字符变量.._第1张图片
C语言字符常量与字符变量.._第2张图片
有一些字符无法在键盘上体现 这被称为不可见字符 在ASCII码表中体现为前32个字符(数值0-31)
在这些不可见字符中 不是全部都有字母格式的转义字符 有些需要查表获取八进制数值以表示转义字符

你可能感兴趣的:(c语言,c++,开发语言)