【学习笔记之C语言】char类型的赋值 您所在的位置:网站首页 把字符a赋给c 【学习笔记之C语言】char类型的赋值

【学习笔记之C语言】char类型的赋值

2024-06-16 20:37| 来源: 网络整理| 查看: 265

目录 一、char类型 二、char类型的赋值 三、示例中的错误原因

编译环境:VC++6.0 p.s.本文不区分初始化和赋值

首先看以下例子 char c= printf("%c %d\n",c,c); 97 a 97 '97' 7 55 "97" 报错 a 报错 'a' a 97 "a" 报错 WIND 报错 'WIND' D 68 "WIND" 报错

上述例子按内容可分为 数字、单个字母(字符)、多个字母(字符); 按格式可分为 原形、加单引号、加双引号。

为理解出现上述结果的原因,需要对char类型有一定的理解。

一、char类型 char类型的作用是存储单个字符,然而技术上,实际存储的是该字符对应的整数。字符及其整数的对应关系见于系统所使用的字符集,ASCII码是其中常用的一种。 简单说就是,如果小明是char部门的,那么他的代号是单个字符(如a),实际员工编码是花名册上对应的数字。a是人们使用的需要,编码则是管理的需要。 其实想想要怎么在以数字编码为基础的计算机上表示一个字符,很自然就可以得到char类型和字符集的想法。

二、char类型的赋值 char类型有两种赋值形式:

数字型字符型(加单引号)

首先讲数字型,如 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,也就是第一个例子,可得正确结果。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有