C 语言 - 数据类型
C 语言是一门静态类型语言,也就是说,数据类型是在编译其间确定的,或者说在运行之前确定的,因此编写 C 代码时需要声明变量的数据类型。确定数据类型之后,就确定了其在存储中占用多少空间以及如何解释其中的字节。
那么,本节就给大家介绍 C 语言中都有哪些数据类型,以及使用它们的注意事项。
概览
C 语言中的数据类型可以分为如下几类:
- 基本类型:基本类型是用作算术运算的数据类型,可进一步分为整数类型和浮点类型。
- 枚举类型:枚举类型也属于算术类型,只不过它们用于定义只能分配某些离散整数值的变量。
- void 类型:类型说明符 void 表示没有可用值,即空类型。
- 派生类型:包括指针类型、数组类型、结构体类型、联合体类型和函数类型。
枚举类型和派生类型我们将在接下来的章节中逐一介绍,包括数组类型、结构体类型、指针等等,这里我们主要介绍基本数据类型。
整数类型
C 语言的整数类型包括 char、short、int、long 和 long long 五种,默认是有符号的整数,如果想要声明为无符号整数,需要在前面加上 unsigned 关键字。下表列出了各整数类型及其存储大小和数值范围。
类型 | 存储大小 | 数值范围 |
---|---|---|
char | 1 字节 | -128 - 127 |
unsigned char | 1 字节 | 0 - 255 |
int | 4 字节 | -2,147,483,648 - 2,147,483,647 |
unsigned int | 4 字节 | 0 - 4,294,967,295 |
short | 2 字节 | -32,768 - 32,767 |
unsigned short | 2 字节 | 0 - 65,535 |
long | 4 或 8 字节 | |
unsigned long | 4 或 8 字节 | |
long long | 8 字节 | -9223372036854775808 - 9223372036854775807 |
unsigned long long | 8 字节 | 0 - 18446744073709551615 |
在声明数据类型,如果不添加 unsigned,则默认为 signed 类型。也就是说 int
和 signed int
是等效的。
值得一提的是,int
和 long
类型的存储大小在不同平台上可能会不一样,例如在某些单片机系统中,int
是 2 字节的。在 32 位系统中,long
是 4 字节的,而在 64 位系统中,long
是 8 字节的。然而,在不同的操作系统之间还会存在差异,例如同样是 64 位处理器,Windows 系统的 long
是 4 字节的,而 Linux 系统的 long
是 8 字节的。程序员在编写 C 程序时需要注意这一点。
为了解决整数类型存储大小不兼容的问题,标准 C 库特别定义了一系列类型,包括 int8_t
、int16_t
、int32_t
、int64_t
、uint8_t
、uint16_t
、uint32_t
、uint64_t
,可用它们可以增强程序的兼容性。
下面是定义整数类型变量的一些示例:
int a = 0;
uint16_t b = 0;
char c = 0;
浮点类型
C 语言的浮点类型包括 float、double 以及 long double 三种,浮点数都是有符号。其中,float 称为单精度浮点型,double 称为双精度浮点型。下表列出了各浮点类型及其存储大小和数值范围。
类型 | 存储大小 | 数值范围 | 精度 |
---|---|---|---|
float | 4 字节 | 1.2E-38 - 3.4E+38 | 小数点后 6 位 |
double | 8 字节 | 2.3E-308 - 1.7E+308 | 小数点后 15 位 |
long double | 10 字节 | 3.4E-4932 - 1.1E+4932 | 小数点后 19 位 |
下面是定义浮点类型变量的一些示例:
float a = 1.0;
float b = 1.0f;
float c = 112.64E3;
double d = 0.7623e-2;
double e = 1.23002398;
浮点数可以使用科学计数法表示,在赋值时可以在数值常量末尾添加 f
进行限定。
空类型
在 C 语言中,void 类型有以下三种用法。
1. 作为函数返回值
如果一个函数返回 void,则表示该函数不返回任何值。例如:
void exit(int status);
2. 作为函数参数
如果一个函数的参数列表是 void,则表示该函数不接受任何参数,或者说它不需要参数。例如:
int rand(void);