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;
}