字符
首先我们知道字符类型的数据是用char来定义的,一个字符占一个字节,且字符类型其实是一种特殊的整型或者说整型是一种特殊的字符类型
#include <stdio.h>
int main()
{
char a=172;
int b='f';
printf("%c,%d",a,b);
}
若上述代码所示,无论你是用int去定义一个变量,变量里放着一个字符还是用char去定义一个变量,变量里放着一个整数,编译都不会报错,区别只在于最后的输出,%c输出字符类型,但底层是编译器去找ASCLL码表去找整型变量后面对应的字符或者字符变量后面对应的整型数字
还有一个要注意的点就是C语言里的char是没有默认是否有符号的,不同的电脑不同的编译器若不注意则会出现不同的结果
#include <stdio.h>
int main()
{
char a=172;
printf("%d",a);
}
相信看到这个代码许多人的答案都是最后输出172,可惜结果天差地别,真正的结果是。。。。
为什么是-84呢,这个答案真是令人莫名其妙,但其实当你了解char的取值范围以及有无符号的最大取值范围你舅明白了,很显然我的编译器是默认char为有符号的,无符号的char取值范围是0-255,而有符号的char取值范围是-128——127,他的关系是这张图
纯手画,勿喷,172等于说是经过了从0到127,127后接着的是-128,这是由于计算机底层的补码和反码,然后从-128在继续走172-127+1=46个数(从零开始),所以最后的结果就是-128+46=-84
字符串
C语言不像java有专门的String类,字符串用起来很方便,C语言的字符串其实说到底就是一个字符类型的数组,他的定义方式很简单
#include <stdio.h>
int main()
{
char a[5]={'a','b','c','d','e'};
}
但是这样的定义需要注意,C语言的字符串是以\0结尾的,所以当你的字符串结束后要加个\0但是你还可以这么定义
#include <stdio.h>
int main()
{
char a[]="abcde";
}
这样的定义形式也是可以的,且不用定义具体的字符串长度,也不用在末尾添加\0这些编译器都会默认加好,但是字符串长度并不是5个因为虽然没有写但是\0依然存在只不过编译器给你加上去了你看不见罢了