【C语言入门教程】2.5 字符型数据
字符型数据用于在计算机上保存字符编码和一些文本控制命令,多个字符型数据和字符串结束符组成的序列称为字符串。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 字符型数据的更多相关文章
- 【C语言入门教程】2.4 浮点型数据
浮点型数据又称实型数据,是一个以十进制表示的符号实数.符号实数的值包括整数部分.尾数部分和指数部分. 2.4.1 浮点型常量 一些较大的数值,或者有小数位.指数位的数值都需要用浮点型常量表示.浮点型常 ...
- C语言入门教程-(5)格式化输入输出
1.输入和输出 在程序的使用中,我们经常可以看的这么一个场景:用户需要输入数据,经过程序运算,得到结果后输出.在C语言中,输入数据和输出数据都是由库函数完成的,通过语句来输入/输出. 2.格式化输出— ...
- 《Ruby语言入门教程v1.0》学习笔记-01
<Ruby语言入门教程v1.0> 编著:张开川 邮箱:kaichuan_zhang@126.com 想要学习ruby是因为公司的自动化测试使用到了ruby语言,但是公司关于ruby只给了一 ...
- c语言该怎么入门?C语言入门教程(非常详细)
C语言是一门面向过程的编译型语言,它的运行速度极快,仅次于汇编语言.C语言是计算机产业的核心语言,操作系统.硬件驱动.关键组件.数据库等都离不开C语言:不学习C语言,就不能了解计算机底层. 这套「C语 ...
- 《JavaScript语言入门教程》记录整理:入门和数据类型
目录 入门篇 js介绍 历史 基本语法 数据类型 概述 null 和 undefined 数值 字符串 对象 函数 数组 本系列基于阮一峰老师的<JavaScrip语言入门教程>或< ...
- 《JavaScript语言入门教程》记录整理:运算符、语法和标准库
目录 运算符 算数运算符 比较运算符 布尔运算符 二进制位运算符 void和逗号运算符 运算顺序 语法 数据类型的转换 错误处理机制 编程风格 console对象和控制台 标准库 Object对象 属 ...
- 【C语言入门教程】目录/大纲
第一章 C语言编程基础 1.1 基本程序结构 1.2 函数库 和 链接 1.3 C语言“32个”关键字 第二章 数据类型.运算符和表达式 2.1 数据类型(5种基本数据类型),聚合类型与修饰符 2.2 ...
- (转)C语言16进制输出字符型变量问题
最近在做一个C的嵌入式项目,发现在C语言中用printf()函数打印字符型变量时,如果想采用"%x"的格式将字符型变量值以十六进制形式打印出来,会出现一个小问题,如下: char ...
- 【C语言入门教程】3.2 数据的输入 与 输出
在程序的运行过程中,通常需要用户输入一些数据,而程序运算所得到的计算结果等又需要输出给用户,由此实现人与计算机之间的交互.所以在程序设计中,输入输出语句是一类必不可少的重要语句.在 C 语言中,没有专 ...
- 【C语言入门教程】4.5 指针变量的定义与引用
指针变量是包含内存地址的变量.一般的变量直接包含一个特定的值,而指针变量包含的是某一特定数据类型的内存地址.普通变量直接引用其中的值,指针变量则间接引用所指向内存地址中的值.指针变量在使用前需要声明与 ...
随机推荐
- linux中配置NTP基本操作
计算机的系统时间是由计算机内的石英晶体震荡电路以固定的震荡频率产生的date 查看当前时区vim /etc/sysconfig/clock 修改时区配置文件ZONE="America/Ne ...
- ECMAScript严格模式简介
写在前面 大家都知道使用"use strict"表示使用ECMAScript进行严格模式,使用"use strict"有两种方式 在文件头部写上它(使得整个脚本 ...
- cobbler重装、web、定制化
cobbler重装 根据此文已自动化安装centos 7的版本http://www.cnblogs.com/shhnwangjian/p/5858900.html 在cobbler-test主机上重装 ...
- Spring MVC学习笔记——Welcome
参考: http://blog.csdn.net/hehexiaoyou/article/details/23747617 http://www.codingyun.com/article/47.ht ...
- Win7环境下Eclipse连接Hadoop2.2.0
准备: 确保hadoop2.2.0集群正常运行 1.eclipse中建立java工程,导入hadoop2.2.0相关jar包 2.在src根目录下拷入log4j.properties,通过log4j查 ...
- php preg_match 过滤字符
$f = preg_match("/g3watches/",$date[0]['desc']); if ($f='1') { $this->error(L('不好意思,输入有 ...
- ecshop去头部和掉底部版权
1.去掉头部版权 打开includes/lib_main.php $page_title = $GLOBALS['_CFG']['shop_title'] . ' - ' . 'Powered by ...
- java中的各个数据结构区别
ArrayList 和Vector是采用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,都允许直接序号索引元素,但是插入数据要设计到数组元素移动等内存操作,所以索引数据快插入数据慢 ...
- GoLang之基础
GoLang之基础 Go是一种并发的.带垃圾回收的.快速编译的语言. 经典的"hello world"入门: package main import "fmt" ...
- Nginx 支持 WAF 防护功能实战
WAF(Web Application Firewall),中文名称叫做“Web应用防火墙 WAF的定义是这样的:Web应用防火墙是通过执行一系列针对HTTP/HTTPS的安全策略来专门为Web应用提 ...