【学习笔记之C语⾔】char类型的赋值
⽬录
⼀、char类型
⼆、char类型的赋值
三、⽰例中的错误原因
编译环境:VC++6.0
p.s.本⽂不区分初始化和赋值
⾸先看以下例⼦
char c= printf("%c %d\n",c,c);
97 a 97
'97' 7 55
"97" 报错
a 报错
c语言char的用法'a' a 97
"a" 报错
WIND 报错
'WIND' D 68
"WIND" 报错
上述例⼦按内容可分为 数字、单个字母(字符)、多个字母(字符);
按格式可分为 原形、加单引号、加双引号。
为理解出现上述结果的原因,需要对char类型有⼀定的理解。
⼀、char类型
char类型的作⽤是存储单个字符,然⽽技术上,实际存储的是该字符对应的整数。字符及其整数的对应关系见于系统所使⽤的字符
集,ASCII码是其中常⽤的⼀种。
简单说就是,如果⼩明是char部门的,那么他的代号是单个字符(如a),实际员⼯编码是花名册上对应的数字。a是⼈们使⽤的需要,编码则是管理的需要。
其实想想要怎么在以数字编码为基础的计算机上表⽰⼀个字符,很⾃然就可以得到char类型和字符集的想法。
⼆、char类型的赋值
char类型有两种赋值形式:
1. 数字型
2. 字符型(加单引号)
⾸先讲数字型,如 char c=97,表⽰要放⼊c这个存储单位的值是97,由ASCII码可知,97对应的字符是a。
⾄于字符型,则很直观,如 char c=‘a’,表⽰变量c代表的就是字符a,由ASCII码知,实际存储的是整数97。
(c是我们定义的char类型的变量,实际上就是我们申请的⼀个存储空间,名字叫作c)
注意我们之所以定义char类型,⽆⾮就是有使⽤字符的需要,所以建议选择字符型赋值。⽽且⽤数字赋值的前提是知道系统所⽤的字符集,必须知道ASCII码只是其中的⼀种。
三、⽰例中的错误原因
1 .单引号内多个字符
如:
char c=‘97’;
char c=‘WIND’;
这⾥⼜有⼀个知识点,C语⾔将字符常量视为 int型,⽽不是char类型。例如有⼀个字符常量,如 ‘A’, 如上⾯说的,它的背后实际上是⼀个由字符集(假设是ASCII码)决定的整数 65。假设 int 型是32位,
char 型是8位,也就是单个字符只需占⽤字符常量的1/4空间,换句话说,⼀个字符常量可以容纳四个字符,如 ‘LOOK’,以%d格式输出为1280266059,换算成⼆进制位:
01001100 01001111 01001111 01001011
每8位所对应⼗进制: 76 79 79 75
ASCII码对应字符: L O O K
从以上结果可知,包含四个字符的字符常量,实际上是把四个单独的字符按顺序存储在⼀个32位的存储单元中。(那么输⼊ ‘ABCDE’会怎样呢? 答案是会报错:error C2015: too many characters in constant)
这样就可以理解为什么例⼦中赋值为 ‘97’、‘WIND’ 时系统不会报错,但是所得结果却不是原先的97、WIND。我们将32位的字符常量,赋值给只有8位的 c 时,会发⽣⾼位截断,只保留低8位,最后赋值结果相当于 c=‘7’、c=‘D’。
2.双引号
char c=“97”;
char c=“a”;
char c=“WIND”;
双引号代表的是⼀个字符串,不能赋值给char变量。⾄于具体原因,⽇后补上。
3.原形
char c=a;
char c=WIND;
这时候等号右边都是变量呀!报错原因其实是右边的变量⽆定义(error C2065: ‘a’ : undeclared identifier)。在可以⽤变量赋值的情况下,这种形式实质上要考虑的是其他问题,例如说,
如果 a 是字符数组的⾸地址,即有a[3]=“97”,显然这就是第⼆种情况(双引号)的问题,编译器报错。
⼜如果 int a=97,那么 c=a 相当于 c=97,也就是第⼀个例⼦,可得正确结果。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论