C 语言数据类型完全指南:整型、浮点型、void 与派生类型
C 语言数据类型是用于声明不同类型变量或函数的庞大系统。变量类型决定其占用存储空间大小及位模式解释方式。
C 语言类型可分类如下:
| 序号 | 类型及描述 |
|---|---|
| 1 | 基本类型 属于算术类型,进一步分为:(a) 整数类型 (b) 浮点类型。 |
| 2 | 枚举类型 也是算术类型,用于定义只能在程序中赋特定离散整数值的变量。 |
| 3 | void 类型 类型说明符 void 表示无可用值。 |
| 4 | 派生类型 包括 (a) 指针类型 (b) 数组类型 (c) 结构类型 (d) 共用体类型 (e) 函数类型。 |
数组类型和结构类型统称聚合类型。函数类型指定函数返回值类型。下节介绍基本类型,其他类型后续章节覆盖。
整数类型
下表提供标准整数类型的存储大小和取值范围详情:
| 类型 | 存储大小 | 取值范围 |
|---|---|---|
| char | 1 字节 | -128 到 127 或 0 到 255 |
| unsigned char | 1 字节 | 0 到 255 |
| signed char | 1 字节 | -128 到 127 |
| int | 2 或 4 字节 | -32,768 到 32,767 或 -2,147,483,648 到 2,147,483,647 |
| unsigned int | 2 或 4 字节 | 0 到 65,535 或 0 到 4,294,967,295 |
| short | 2 字节 | -32,768 到 32,767 |
| unsigned short | 2 字节 | 0 到 65,535 |
| long | 8 字节(32 位系统 4 字节) | -9223372036854775808 到 9223372036854775807 |
| unsigned long | 8 字节 | 0 到 18446744073709551615 |
要获取特定平台上类型或变量的确切大小,可使用 sizeof 运算符。表达式 sizeof(type) 产生对象或类型的存储大小(字节)。下例使用 limits.h 头文件中定义的不同常量获取机器上各类型大小:
在线演示#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
#include <float.h>
int main(int argc, char** argv) {
printf("CHAR_BIT : %d\n", CHAR_BIT);
printf("CHAR_MAX : %d\n", CHAR_MAX);
printf("CHAR_MIN : %d\n", CHAR_MIN);
printf("INT_MAX : %d\n", INT_MAX);
printf("INT_MIN : %d\n", INT_MIN);
printf("LONG_MAX : %ld\n", (long) LONG_MAX);
printf("LONG_MIN : %ld\n", (long) LONG_MIN);
printf("SCHAR_MAX : %d\n", SCHAR_MAX);
printf("SCHAR_MIN : %d\n", SCHAR_MIN);
printf("SHRT_MAX : %d\n", SHRT_MAX);
printf("SHRT_MIN : %d\n", SHRT_MIN);
printf("UCHAR_MAX : %d\n", UCHAR_MAX);
printf("UINT_MAX : %u\n", (unsigned int) UINT_MAX);
printf("ULONG_MAX : %lu\n", (unsigned long) ULONG_MAX);
printf("USHRT_MAX : %d\n", (unsigned short) USHRT_MAX);
return 0;
}
编译执行上述程序,在 Linux 上产生以下结果:
CHAR_BIT : 8 CHAR_MAX : 127 CHAR_MIN : -128 INT_MAX : 2147483647 INT_MIN : -2147483648 LONG_MAX : 9223372036854775807 LONG_MIN : -9223372036854775808 SCHAR_MAX : 127 SCHAR_MIN : -128 SHRT_MAX : 32767 SHRT_MIN : -32768 UCHAR_MAX : 255 UINT_MAX : 4294967295 ULONG_MAX : 18446744073709551615 USHRT_MAX : 65535
浮点类型
下表提供标准浮点类型的存储大小、取值范围及精度详情:
| 类型 | 存储大小 | 取值范围 | 精度 |
|---|---|---|---|
| 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.h 定义宏允许在程序中使用这些值及二进制实数表示的其他细节。下例打印 float 类型占用存储空间及范围值:
在线演示#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
#include <float.h>
int main(int argc, char** argv) {
printf("float 存储大小 : %d \n", sizeof(float));
printf("FLT_MAX : %g\n", (float) FLT_MAX);
printf("FLT_MIN : %g\n", (float) FLT_MIN);
printf("-FLT_MAX : %g\n", (float) -FLT_MAX);
printf("-FLT_MIN : %g\n", (float) -FLT_MIN);
printf("DBL_MAX : %g\n", (double) DBL_MAX);
printf("DBL_MIN : %g\n", (double) DBL_MIN);
printf("-DBL_MAX : %g\n", (double) -DBL_MAX);
printf("精度值: %d\n", FLT_DIG );
return 0;
}
编译执行上述程序,在 Linux 上产生以下结果:
float 存储大小 : 4 FLT_MAX : 3.40282e+38 FLT_MIN : 1.17549e-38 -FLT_MAX : -3.40282e+38 -FLT_MIN : -1.17549e-38 DBL_MAX : 1.79769e+308 DBL_MIN : 2.22507e-308 -DBL_MAX : -1.79769e+308 精度值: 6
void 类型
void 类型指定无可用值。用于三种情况:
| 序号 | 类型及描述 |
|---|---|
| 1 | 函数返回 void C 中有许多函数不返回值,即返回 void。无返回值函数的返回类型为 void。例如 void exit(int status); |
| 2 | 函数参数为 void C 中有许多函数不接受参数。无参函数可接受 void。例如 int rand(void); |
| 3 | void 指针 类型为 void * 的指针表示对象地址,但不表示其类型。例如内存分配函数 void *malloc(size_t size); 返回 void 指针,可转换为任意数据类型。 |
C语言