Skip to content

C 数据类型

数据类型定义了变量可以存储的数据种类以及可以对其执行的操作。它们决定了内存大小以及位模式的解释方式。

C 数据类型可大致分类为:

序号类别描述
1基本类型 (Basic Types)算术类型:进一步分为整型 (Integer Types) 和浮点类型 (Floating-Point Types)。
2枚举类型 (enum) (Enumerated Types)用户定义的整型,变量只能从一组特定的命名整型常量中取值。
3void 类型 (void) (Void Type)表示没有类型/值。用于不返回值的函数、没有参数的函数或泛型指针 (void*)。
4派生类型 (Derived Types)由基本类型构造:指针 (*)、数组 ([])、结构体 (struct)、联合体 (union) 和函数类型。

聚合类型(数组和结构体)将多个数据项组合在一起。函数类型描述函数的返回值类型和参数。

表示整数。标准整型包括:

类型最小尺寸 (标准)最小范围 (标准) 及常见值
char通常 1 字节通常 -128 到 127(有符号)或 0 到 255(无符号)。普通 char 是有符号还是无符号取决于具体实现。
unsigned char1 字节0 到 255
signed char1 字节-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*)。

为了可移植性和可预测的大小,当需要确切宽度时,请使用 <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;
}

表示带小数部分(实数)的数字。

类型典型大小典型精度描述
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>。
  • 类型: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 表示没有类型或值。用途:

序号上下文描述
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 * 对于动态内存分配和泛型函数至关重要。