1、size_t 的定义
size_t
是在标准头文件 或 中定义的 typedef
类型,通常用于表示 内存大小、数组索引、指针运算等。
typedef unsigned long size_t;
注意:不同的平台上,size_t
可能是 unsigned int
、unsigned long
或 unsigned long long
,具体取决于编译器和系统架构。
2、size_t 的主要用途
size_t
的具体大小因平台而异,但通常与指针大小相同(32 位系统为 4 字节,64 位系统为 8 字节)。size_t
的合理使用可以提高代码的可移植性和安全性,在涉及大小计算时,尽量使用 size_t
代替 int
或 unsigned int
。
1) 表示数组或对象的大小
C 标准库中,size_t
常用于存储 sizeof
操作符的返回值。
#include <stdio.h>
int main() {
int arr[10];
size_t size = sizeof(arr); // sizeof 返回的类型是 size_t
printf("Array size: %zu bytes\n", size);
return 0;
}
2)内存分配
size_t
在 malloc()
、calloc()
和 realloc()
这些动态内存分配函数中被广泛使用。
#include <stdio.h>
#include <stdlib.h>
int main() {
size_t n = 5;
int *arr = (int *)malloc(n * sizeof(int)); // 使用 size_t 表示大小
if (arr == NULL) {
printf("Memory allocation failed\n");
return 1;
}
printf("Memory allocated for %zu elements\n", n);
free(arr);
return 0;
}
3)循环和数组索引
size_t
通常用于表示数组索引,因为它是 无符号类型,可以避免负索引的错误。size_t
的合理使用可以提高代码的可移植性和安全性,在涉及大小计算时,尽量使用 size_t
代替 int
或 unsigned int
。
#include <stdio.h>
int main() {
size_t i;
int arr[] = {1, 2, 3, 4, 5};
for (i = 0; i < sizeof(arr) / sizeof(arr[0]); i++) {
printf("%d ", arr[i]);
}
printf("\n");
return 0;
}
4)字符串长度
strlen()
返回 size_t
,用于表示字符串的长度。
#include <stdio.h>
#include <string.h>
int main() {
char str[] = "Hello, world!";
size_t len = strlen(str); // strlen 返回 size_t
printf("String length: %zu\n", len);
return 0;
}