size_t
是 C 标准库中定义的一种无符号整数类型。它用于表示对象的字节大小,也是 sizeof
运算符的返回类型。在 printf
中打印 size_t
值时应始终使用 %zu
。
技术定义
size_t
定义在头文件<stddef.h>
、<stdio.h>
和<stdlib.h>
中。- 其实际底层类型取决于平台和编译器,但始终是足够大的无符号类型,可以容纳平台上最大对象的大小。
典型定义(依赖于实现):
typedef unsigned long size_t; // 在许多 64 位系统上
// 或
typedef unsigned int size_t; // 在许多 32 位系统上
用法示例
#include <stdio.h>
int main(void) {
size_t n = sizeof(int); // 在大多数系统上 n 为 4
printf("int 的字节数: %zu\n", n);
return 0;
}
何时在循环索引中使用 size_t
与 int
适合使用 size_t
的场景:
- 用于数组、字符串或内存块的索引或计数。
- 使用
sizeof
、strlen
等函数返回的值(这些函数返回size_t
)。 - 希望代码具有良好的可移植性,并能处理非常大的数组(在 64 位系统上,
size_t
可能远大于int
)。
示例:
size_t len = sizeof(array) / sizeof(array[0]);
for (size_t i = 0; i < len; ++i) {
// 安全,类型与 len 匹配
}
适合使用 int
的场景:
- 需要递增或递减计数,并且可能用到负值(如反向循环、错误码等)。
- 值的范围保证较小且非负(如小型固定长度循环)。
- 与期望
int
索引的 API 或库配合使用。
示例:
for (int i = 10; i >= 0; --i) {
// 递减计数,可能为负
}
总结表
使用场景 | 推荐类型 |
---|---|
数组/内存索引 | size_t |
需要负数的循环 | int |
计数元素 | size_t |
小型固定循环 | int |
经验法则:
- 数组索引和大小建议用
size_t
(尤其是与标准库函数交互时)。 - 需要负值或通用计数时用
int
。