C 数据类型
C - 数据类型
Section titled “C - 数据类型”数据类型定义了变量可以存储的数据种类以及可以对其执行的操作。它们决定了内存大小以及位模式的解释方式。
C 数据类型可大致分类为:
| 序号 | 类别 | 描述 |
|---|---|---|
| 1 | 基本类型 (Basic Types) | 算术类型:进一步分为整型 (Integer Types) 和浮点类型 (Floating-Point Types)。 |
| 2 | 枚举类型 (enum) (Enumerated Types) | 用户定义的整型,变量只能从一组特定的命名整型常量中取值。 |
| 3 | void 类型 (void) (Void Type) | 表示没有类型/值。用于不返回值的函数、没有参数的函数或泛型指针 (void*)。 |
| 4 | 派生类型 (Derived Types) | 由基本类型构造:指针 (*)、数组 ([])、结构体 (struct)、联合体 (union) 和函数类型。 |
聚合类型(数组和结构体)将多个数据项组合在一起。函数类型描述函数的返回值类型和参数。
整型(Integer Types)
Section titled “整型(Integer Types)”表示整数。标准整型包括:
| 类型 | 最小尺寸 (标准) | 最小范围 (标准) 及常见值 |
|---|---|---|
char | 通常 1 字节 | 通常 -128 到 127(有符号)或 0 到 255(无符号)。普通 char 是有符号还是无符号取决于具体实现。 |
unsigned char | 1 字节 | 0 到 255 |
signed char | 1 字节 | -128 到 127 |
short (short int) | 至少 2 字节 | 至少 -32,768 到 32,767 |
unsigned short | 至少 2 字节 | 至少 0 到 65,535 |
int | 通常是系统的自然字长(在 32 位/64 位系统上常为 4 字节) | 至少 -32,768 到 32,767(与 short 类似),通常更大(4 字节时为 -2,147,483,648 到 2,147,483,647) |
unsigned int | 与 int 大小相同 | 至少 0 到 65,535(与 unsigned short 类似),通常为 0 到 4,294,967,295(4 字节时) |
long (long int) | 至少 4 字节 | 至少 -2,147,483,648 到 2,147,483,647 |
unsigned long | 至少 4 字节 | 至少 0 到 4,294,967,295 |
long long (long long int) (C99) | 至少 8 字节 | 至少 -(2^63) 到 (2^63)-1 |
unsigned long long (C99) | 至少 8 字节 | 至少 0 到 (2^64)-1 |
确切的大小和范围取决于编译器和平台。使用 sizeof 运算符来查找在您的系统上以字节为单位的大小:sizeof(int),sizeof(char*)。
固定宽度整型 (C99 - <stdint.h>)
Section titled “固定宽度整型 (C99 - <stdint.h>)”为了可移植性和可预测的大小,当需要确切宽度时,请使用 <stdint.h> 中的类型:
int8_t,int16_t,int32_t,int64_t:精确为 8、16、32、64 位的有符号整型。uint8_t,uint16_t,uint32_t,uint64_t:精确为 8、16、32、64 位的无符号整型。intptr_t,uintptr_t:能够容纳对象指针的整型类型。
示例:
#include <stdint.h> // 用于固定宽度整型#include <stdio.h> // 用于输入/输出
int main(void) { int32_t file_offset = -1024; uint8_t pixel_value = 255; printf("偏移量: %d, 像素: %u\n", file_offset, pixel_value); printf("Size of int32_t: %zu bytes\n", sizeof(int32_t)); // %zu 用于 size_t return 0;}浮点类型(Floating-Point Types)
Section titled “浮点类型(Floating-Point Types)”表示带小数部分(实数)的数字。
| 类型 | 典型大小 | 典型精度 | 描述 |
|---|---|---|---|
float | 通常 4 字节 | 约 6-7 位十进制精度 | 单精度 |
double | 通常 8 字节 | 约 15-16 位十进制精度 | 双精度 |
long double | 常为 10, 12 或 16 字节 | 比 double 精度更高(取决于平台) | 扩展精度 |
头文件 <float.h> 定义了宏(如 FLT_MIN、DBL_MAX、LDBL_DIG),提供了关于特定平台上的浮点表示的详细信息。
布尔类型 (C99 - <stdbool.h>)
Section titled “布尔类型 (C99 - <stdbool.h>)”C99 引入了标准的布尔类型。
- 包含
<stdbool.h>。 - 类型:
bool - 值:
true,false
示例:
#include <stdbool.h> // 用于 bool#include <stdio.h> // 用于输入/输出
int main(void) { bool is_active = true; if (is_active) { printf("系统处于活动状态。\n"); } return 0;}内部上,bool 通常是整型类型,其中 false 为 0,true 通常为 1。
void 类型
Section titled “void 类型”void 表示没有类型或值。用途:
| 序号 | 上下文 | 描述 |
|---|---|---|
| 1 | 函数返回类型 (Function Return Type) | 指示函数不返回值。示例:void print_message(const char *msg); |
| 2 | 函数参数 (Function Parameters) | 指示函数不接受参数。示例:int get_random_number(void); |
| 3 | 泛型指针 (void *) (Generic Pointers) | 指向 void 的指针可以存放任何数据类型的地址,但不能直接解引用。必须先将其强制转换为特定的指针类型。示例:malloc 返回 void *。void *ptr = malloc(100); int int_ptr = (int)ptr; |
理解 void * 对于动态内存分配和泛型函数至关重要。