数据类型

1.常量

程序运行中值不能被改变的量称为常量。数值常量就是数学中的常数。

1.1.整型常量:整数即为整型常量。

1.2.实型常量:实数即为实型常量。常量有两种表示形式:

第一种是十进制小数形式,由数字和小数点组成,如:123.456,0.345等。第二种是指数形式,如12.34e3表示12.34 x 103 。由于计算机输入时无法表示上下角标,所以规定字母e或E代表以10为底的指数。需要注意的是,e或E之前必须有数字,e后面必须为整数。

1.3.字符常量

a.普通字符

用单撇号括起来的单个的一个字符称为普通字符常量,如’a’,’Z ’。但’ab’,’1a2’不是字符常量。字符常量在计算机中存储时,不是以字符形式存储,而是以ASCII代码形式存储。例如’a’的代码是97。ASCII字符对照表见附录。

b.转义字符

除了正常的字符之外,C语言中还有一种特殊形式的字符常量,称为转义字符。转义字符是为了表示一些无法直接用字符表达的内容而存在的。例如在输出函数中,’\n’代表一个换行符。常用的转义字符如下表: |转义字符|字符值|输出结果| |:--:|:--:|:--:| |\’|一个单撇号(’)|输出具有此八进制码的字符| |\”|一个双撇号(”)|输出此字符| |\?|一个问号(?)|输出此字符| |\|一个反斜线(\)|输出此字符| |\a|警告(alert)|声音或视觉信号| |\b|退格(backspace)|后退一个字符| |\f|换页(form deed)|将当前位置移至下一页开头| |\n|换行|将当前位置移至下一页开头| |\r|回车(carriage return)|将当前位置移至本行的开头| |\t|水平制表符|将当前位置移至下一个tab| |\v|垂直制表符|将当前位置移至下一个垂直制表对齐点|

c.字符串常量

如”boy”,”123”等用双引号括在一起的多个字符称为字符串。

d.符号常量与预定义指令

用#define指令,在程序开始的时候讲程序中的一个符号替换成一个常量。例如:

#define    PI    3.14

使用预定义指令的好处在于,能在程序某个变量需要修改的时候做到改动一处就能修改全局。这个时候有一个需要思考的问题,例如有两行代码:

#define    PI    3.14
int  PI = 3.14;

当我们想要修改PI的值时,同样都可以做到“一改全改”,那么这两种方法有什么区别呢?区别是这样的,#define预定义指令相当于我们直接在代码上进行“查找与替换”,属于直接在代码上进行修改,在预编译的时候这个符号就全部被替换成相应的值了,并不占用内存。但第二行代码中,如果修改了PI的值,就改动了对应内存空间的数值。

2.变量

2.1.变量与常变量

变量就是程序中定义的可以存入数据的存储空间,例如如下代码:

int a;
a = 2;

就是在内存中开辟了一个名为a的内存空间,再为其存入相应的值。示意图如下:

变量必须先定义,后使用。没有被定义的变量是不允许赋值的,相反地,没有值的变量是没有意义的。对程序编译连接的时候,编译系统会为每一个变量名分配对应的内存地址。从中取值,实际上是通过变量名找到相应的内存地址,再从中读取数据。 C 99中允许使用常变量,例如:

const int a = 3;

这样就定义了一个整形变量a,但是变量存在期间它的值不允许被改变。这样我们称a是一个常变量。

2.2.标识符

在高级语言中,用来对变量、函数、类型等命名的字段统称为标识符(identifier),简单来说,标识符就是一段内存空间、一个变量、一个功能的名字。之前提到过的printf、PI等都是标识符。 C语言规定,标识符只能由字母、数字、下划线构成,并且数字不能位于第一个字符。下面列出的都是合法标识符:

  • sun
  • average
  • _total
  • Student_1

下面列出的是不合法标识符:

  • M.J.Tom
  • 3D86
  • $34

标识符在编译系统看来,同一个字母的大写与小写字母是两个不同的字母,Sum与sum也是两个不同的变量名。按照人们的日常习惯,常常用小写字母来命名变量。

3.基本类型

在之前的例程中,我们发现,定义一个变量的时候要指定相应的变量类型。C语言中要求定义所有的变量都要指定相应的类型。这是为什么呢?

在数学运算中,数字是抽象存在的,并且允许模糊的计算存在,比如10 / 3 = 3.333333……,但是在计算机运算中,数值是具体存在于某一个内存单元的。并且,储存单元的大小是有限的,这样的话在计算机中就不存在无穷的概念。例如有如下程序:

printf(“%d” , 1.0 / 3.0);

输出结果将会是0.333333,只有6位小数,没有无限循环的小数,这就与“%d”(整形)所表示的变量类型的存储能力有关。所谓变量类型,就是计算机对变量分配的存储空间的长度与存储形式。

3.1.整形 int

整形数据在内存中分配2个或4个字节,这与编译环境有关。Turbo C 2.0为int型数据分配2个字节的存储空间,Visual C++为int型分配4个字节的存储空间。int型能容纳的数值范围为-231~(231-1)(相应的存储方式的细节可以查阅参考资料[1]的3.2.3节(44页):《整形数据》)。

除了普通的int型数据之外,还有短整型(short int)和长整型(long int)数据类型,前者占2字节,后者占4个字节。由于实际编程需要,双长整型(long long int)新增进来。相信未来为了实际需要,还会加入更强大的变量类型。

常见的int型变量的储存空间和数值范围:

类型 字节数 数值范围
int
基本整形
2 -32678~32767
4 -2147483648~2147483647
unsigned int
无符号基本整形
2 0~65535
4 0~4294967295
short
短整型
2 -32768~32767
unsigned short
无符号短整型
2 0~65535
long
长整型
4 -2147483648~2147483647
unsigned long
无符号长整型
4 0~4294967295
long long
双长型
8 -9223372036854775808~9223372036854775807
unsigned long long
无符号双长整型
2 0~18446744073709551615

3.2.浮点型 float

浮点型数据是用来存储具有小数点的实数的。由于同一个小数用指数形式表示的时候有多种形式,例如3.14159可以表示为3.14159e0、0.34159e1,它们代表同一个值。可以看到小数点是在数字之间浮动的,所以实数的指数形式称为浮点数。 规定小数点左边的数字为0,小数点右边的第一位数字不为0,这种小数的表示形式称为规范化的指数形式,例如0.314159e1。一个实数只有一个规范化的指数形式,在程序输出时以这种形式输出。 浮点数类型包括float 单精度浮点型、double 双精度浮点型、long double长精度浮点型。每种类型的存储方式各不相同,能表示的数值范围也各不相同,如下表:

类型 字节数 有效数字 数值范围(绝对值)
float 4 6 0及1.2e-38~3.4e38
double 8 15 0及2.3e-308~1.7e308
long double 8 15 0及2.3e-308~1.7e308
16 19 0及3.4e-4932~1.1e4932

关于存储形式,可以参阅参考资料[1]的3.2.5节(50页):《浮点型数据》)

3.3.字符型 char

字符与字符代码不是任意写一个字符程序都能识别,有些时候为了表示一些系统字符集中没有的字符,只能使用系统的字符集。如圆周率π。目前大多数系统使用ASCII字符集,所有字符集大多都包含全部的127个基本字符。 (参见附录1:ASCII码对照表) 标准的字符型数据在系统中都用7位二进制数存放,例如数字1在ASCII码对照表中排在第49位,二进制码为00110001。在C中,规定用1个字节(8位)存储一个字符,字节中的第一位为0。有关于字符型数据在计算机中的详细存储方式,可以参阅参考资料[1]的3.2.4节(48页):《字符型数据》) 字符变量是用类型标识符char定义的变量,比如定义一个字符型变量:

char c = ’?’;

? 是字符型变量,它的ASCII编码为63,所以在执行这个语句的时候,系统将整数63存入变量c。此外,字符型数据的存储空间和数值范围如下:

类型 字节数 数值范围
signed char(有符号字符型) 1 -128~127
unsigned char(无符号字符型) 1 0~255

此外,关于字符型变量用整数形式存储的相关知识将在《输入与输出》一节详细讲解。

4.其他类型

除了上面提到的基本类型之外,还有指针类型、函数类型、数组类型、结构体类型、共用体类型、枚举类型、空类型等。这些数据类型将在后面分别详细讲解。

这本书是xt写的上次修改: 2019-04-18 15:35:47

results matching ""

    No results matching ""