2023-06-08 15:25:19
在C语言中,len 并不是一个预定义的标识符或关键字,而是一个常见的自定义变量名,通常用于表示数组或字符串的长度(元素数量)。其核心逻辑是通过 sizeof 运算符计算数组的总字节大小,再除以单个元素的字节大小,从而得到元素数量。以下是详细说明:
1. len 的常见用法计算数组长度:开发者常通过以下方式计算静态数组的元素数量,并将结果赋值给变量 len:
int array[] = {10, 20, 30, 40};int len = sizeof(array) / sizeof(array[0]); // len = 4sizeof(array) 返回数组总字节大小(如 int[4] 可能是 16 字节,假设 int 占 4 字节)。
sizeof(array[0]) 返回单个元素的字节大小(如 int 占 4 字节)。
结果:len = 16 / 4 = 4(数组元素数量)。
字符串长度:在字符串处理中,len 可能存储字符串的字符数(不包括终止符 0),但需注意 sizeof 对指针和字符数组的区别:
char str[] = "hello";int len = sizeof(str) / sizeof(str[0]) - 1; // len = 5(减去 '0')仅适用于静态数组:若数组作为指针传递给函数(如 void func(int arr[])),sizeof(arr) 返回的是指针大小而非数组大小,此时 len 计算会失效。
void printLen(int arr[]) { int len = sizeof(arr) / sizeof(arr[0]); // 错误!len 可能是 1 或 2(指针大小)}动态数组无效:动态分配的数组(如 malloc)需额外记录长度,sizeof 无法直接获取其元素数量。
宏定义的替代方案:为避免重复计算,开发者可能用宏定义 len:
#define ARRAY_LEN(arr) (sizeof(arr) / sizeof(arr[0]))int len = ARRAY_LEN(array); // 直接使用宏