字符型数据用于在计算机上保存字符编码和一些文本控制命令,多个字符型数据和字符串结束符组成的序列称为字符串。Linux 系统与其他大多数操作系统一样,支持 ASCII编码对字符编码,每个字符占用 1 个字节的存储空间。

2.5.1 字符常量

字符常量是指用一对单引号包围起来的一个字符,例如'c','3','%'。字符常量中的单引号只起定界作用并不表示字符本身。单引号中的字符不能是单引号和反斜杠“\”,他们必须用转义字符表示。

每个字符在 ASCII 编码里有唯一的整数值,例如 0 的值为 0x30,A 的值为 0x41。因此,两个字符常量间的运算,或字符常量与整型变量间的运算是允许的,代码如下:

short a, b;			// 声明短整型变量
a = 'c' + '1'; // 将两个字符常量相加,并将结果保存到短整型变量 C 中
b = '9' - 9; // 计算字符常量 9 与整型常量 9 之间的差,为变量 b 赋值

上例中,变量 a 的值 0x94,变量 b 的值为 0x30。

2.5.2 字符串常量

字符串常量是指用一对双引号包围起来的一串字符。例如"China"、"886000"等都是字符串常量。双引号只起定界作用,其中不能包含双引号,字符串也不能是唯一一个反斜杠。例如“"”和“\”是非法的。

C语言中,字符串常量存储在内存中时,系统自动在字符串的末尾加一个字符串结束符,即 ASCII中编码为0的字符NULL,常用“\0” 表示。因此,在程序中,长度为n个字符的字符串常量,在内存中占有 n+1 个字节的存储空间。

例如,字符串“China”有 5 个字符,作为字符串“China”存储在内存中时,共占 6 个字节,系统自动在后面加上NULL字符,其存储形式如下表所示:

ASCII码     0x43 0x68 0x69 0x6E 0x61 0x00
字符 C h i n a \0

要特别注意“字符常量”与“字符串常量”的区别,除了表示形式不同外,其存储性质也不相同,字符 A 只占 1 个字节,而字符串 A 却占 2 个字节。

2.5.3 转义字符

转义字符用于表示C语言中有特殊意义的符号,或者 ASCII码字符集中无法显示的控制符号。例如,单引号和双引号,以及换行符、字符串、字符串结束符。转义字符用反斜杠加上一个字符组成,也可用该字符的ASCII码来代替字符的意义。例如\0用于表示字符串结束符,\n 表示换行符。下表给出了C语言中常用的转义字符。

C语言中常见的转义字符
转义字符 说明 ASCII码
\a 响铃 0x07
\b 退格 0x08
\f 换页 0x0C
\n 换行 0x0A
\r 回车 0x0D
\t 水平制表 0x09
\\ 反斜杠 0x5C
\? 问号字符 0x3F
\' 单引号 0x27
\" 双引号 0x22
\0 NULL 0x00

在C语言中使用转义字符\ddd或者\xhh可以方便灵活地表示任意字符。\ddd为斜杠后面 3 位八进制数,这 3 位八进制数的值即为对应的八进制ASCII码。\xhh后面跟 2 位十六进制数,这 2 位十六进制数即为对应的十六进制ASCII码值。

2.5.4 符号常量

使用预处理命令#define定义的常量称为符号常量。为了在程序中易于区别,符号常量通常使用大写英文字母作为标识符。定义的形式是:

#define <符号常量名> <常量>

其中,符号常量名遵循 C 语言标识符的定义方法,常量值可以是任何基本数据类型。如下例所示:

#define EV 2.78				// 定义表示数值的符号常量
#define BJ "BeiJing" // 定义表示字符串的符号常量

符号常量的作用是提高程序的易读性,便于程序的设计和调试。如果某一数值或字符串在程序中使用次数较多,或者代表特定的意义,那么将其定义为符号常量。如果该数值或字符串需要修改,只需要对预处理命令中定义的常量值进行修改即可。

2.5.5 字符变量

字符变量用来存放ASCII码符号,一次只能存放一个符号,因为单个字符变量的存储空间只有 1 字节。字符变量的定义形式如下:

char c;			// 声明字符变量
c = 'm'; // 用字符常量给字符变量赋值

另外,给字符变量赋值也可以直接使用 ASCII码值,例如:

c = 0x6D;        // 直接使用ASCII码值给字符变量赋值

与字符常量一样,字符变量也可以进行数学运算。通过查阅 ASCII码表,可以发现大写字母码值与小写字母之间的差为 0x20,即 A 加上 0x20 的结果为 a。当字符变量进行数值运算时,给字符变量赋的值大于字符变量的值域,会产生周期性变化。如下例源代码所示:

char c1, c2, c3;			// 声明字符变量
c1 = 357; // 使用值域范围外的数值为字符变量赋值
c2 = -251; // 使用值域范围外的数值为字符变量赋值
c3 = 'm' + 256; // 表达式的计算结果在字符串变量值域以外
printf("%d, %d, %d\n", c1, c2, c3); // 将字符变量中储存的数值以十进制数输出

在 C 语言里,这个程序是正确的,3 个变量中储存的十进制数值分别是 101、5、109。变量 c1 的值等于 357 减去 256,c2 的值是 -251 加上 256,c3 的值加上 256 后并未变化,变量越界时呈现出周期性变化。产生周期性的原因在于计算机底层的数值表示方法,所有数值都被保存为二进制,而数值超过值域后产生的高位数值被省略。例如变量 c3 的二进制值为 01101101,当它加上 256 后,计算机需要 2 个字节来保存计算结果 00000001 01101101。而字符变量的存储空间只有1 字节,所以前面的高位数值被省略,计算结果与原值相同。这一特性也是所有整型变量都具备的。

【C语言入门教程】2.5 字符型数据的更多相关文章

  1. 【C语言入门教程】2.4 浮点型数据

    浮点型数据又称实型数据,是一个以十进制表示的符号实数.符号实数的值包括整数部分.尾数部分和指数部分. 2.4.1 浮点型常量 一些较大的数值,或者有小数位.指数位的数值都需要用浮点型常量表示.浮点型常 ...

  2. C语言入门教程-(5)格式化输入输出

    1.输入和输出 在程序的使用中,我们经常可以看的这么一个场景:用户需要输入数据,经过程序运算,得到结果后输出.在C语言中,输入数据和输出数据都是由库函数完成的,通过语句来输入/输出. 2.格式化输出— ...

  3. 《Ruby语言入门教程v1.0》学习笔记-01

    <Ruby语言入门教程v1.0> 编著:张开川 邮箱:kaichuan_zhang@126.com 想要学习ruby是因为公司的自动化测试使用到了ruby语言,但是公司关于ruby只给了一 ...

  4. c语言该怎么入门?C语言入门教程(非常详细)

    C语言是一门面向过程的编译型语言,它的运行速度极快,仅次于汇编语言.C语言是计算机产业的核心语言,操作系统.硬件驱动.关键组件.数据库等都离不开C语言:不学习C语言,就不能了解计算机底层. 这套「C语 ...

  5. 《JavaScript语言入门教程》记录整理:入门和数据类型

    目录 入门篇 js介绍 历史 基本语法 数据类型 概述 null 和 undefined 数值 字符串 对象 函数 数组 本系列基于阮一峰老师的<JavaScrip语言入门教程>或< ...

  6. 《JavaScript语言入门教程》记录整理:运算符、语法和标准库

    目录 运算符 算数运算符 比较运算符 布尔运算符 二进制位运算符 void和逗号运算符 运算顺序 语法 数据类型的转换 错误处理机制 编程风格 console对象和控制台 标准库 Object对象 属 ...

  7. 【C语言入门教程】目录/大纲

    第一章 C语言编程基础 1.1 基本程序结构 1.2 函数库 和 链接 1.3 C语言“32个”关键字 第二章 数据类型.运算符和表达式 2.1 数据类型(5种基本数据类型),聚合类型与修饰符 2.2 ...

  8. (转)C语言16进制输出字符型变量问题

    最近在做一个C的嵌入式项目,发现在C语言中用printf()函数打印字符型变量时,如果想采用"%x"的格式将字符型变量值以十六进制形式打印出来,会出现一个小问题,如下: char  ...

  9. 【C语言入门教程】3.2 数据的输入 与 输出

    在程序的运行过程中,通常需要用户输入一些数据,而程序运算所得到的计算结果等又需要输出给用户,由此实现人与计算机之间的交互.所以在程序设计中,输入输出语句是一类必不可少的重要语句.在 C 语言中,没有专 ...

  10. 【C语言入门教程】4.5 指针变量的定义与引用

    指针变量是包含内存地址的变量.一般的变量直接包含一个特定的值,而指针变量包含的是某一特定数据类型的内存地址.普通变量直接引用其中的值,指针变量则间接引用所指向内存地址中的值.指针变量在使用前需要声明与 ...

随机推荐

  1. python学习笔记-(一)初识python

    1.python的前世今生 想要充分的了解一个人,无外乎首先充分了解他的过去和现在:咱们学习语言也是一样的套路 1.1 python的历史 Python(英国发音:/ˈpaɪθən/ 美国发音:/ˈp ...

  2. 用LinkedList模拟栈数据结构的集合

    用Eclipse软件进行操作    有2种方法,左边为第一种,右边为第二种 创建class为MyStack 代码实现: package cn_LinkedList;   import java.uti ...

  3. Div内有ul li元素,Div设置高度100%,谷歌IE下li过多会显示滚动条,而火狐下就会滚动条就不起作用,li会撑大Div

    产品上也许是用了过多iframe问题,自己做了demo没有这种情况 解决办法: 设置Div的display样式为-moz-inline-grid -moz-代表火狐私有属性,使用自己的div样式就可以 ...

  4. OpenGL Tutorial

    https://open.gl https://www.processing.org/tutorials/pshader/

  5. 谈谈我对PhoneGap的看法——(摘自唐巧的技术博客)

    源地址:http://blog.devtang.com/blog/2012/03/24/talk-about-uiwebview-and-phonegap/ 主题部分 我认为PhoneGap有以下3大 ...

  6. 使用.net Stopwatch class 来分析你的代码

    当我们在调试,优化我们的代码的时候,想知道某段代码的真正的执行时间,或者我们怀疑某段代码,或是某几段代码执行比较慢, 需要得到具体的某段代码的具体执行时间的时候.有一个很好用的类Stopwatch. ...

  7. adobe photoshop cc 2014 安装失败 解决办法之一

    首先安装失败会有提示 首先贴下错误信息 Exit Code: 34 Please see specific errors below for troubleshooting. For example, ...

  8. Web Pages - Efficient Paging Without The WebGrid

    Web Pages - Efficient Paging Without The WebGrid If you want to display your data over a number of p ...

  9. MemberCached安装

    先上干货.. http://yunpan.cn/cmnABPWq27Mk7  访问密码 2ab3 这包里是安装包和一个比较合适的例子..例子是从CSDN上下载的..觉得对新手有帮助. 不过在这之前.. ...

  10. XPath使用小结

    参考资料: http://www.w3school.com.cn/xpath/xpath_nodes.asp