在C语言中,数组本身并没有内置的获取数组大小的快捷方式,但可以通过以下方法实现:
C语言的数组在编译时确定大小,但不会存储长度信息。数组名在大多数情况下会退化为指针,因此无法直接通过数组变量获取长度。
sizeof
运算符(仅适用于静态数组)int arr[10];
size_t size = sizeof(arr) / sizeof(arr[0]); // 计算元素个数
#define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]))
动态分配的数组(如 malloc
)需手动记录长度:
int* dynamic_arr = malloc(10 * sizeof(int));
size_t dynamic_size = 10; // 需额外变量保存长度
sizeof
对函数参数中的数组失效?sizeof
返回指针大小而非数组大小。std::array
或 std::vector
的 size()
方法。len()
或 .length
属性。sizeof
或宏。#include <stdio.h>
#define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]))
int main() {
int static_arr[] = {1, 2, 3, 4, 5};
printf("Static array size: %zu\n", ARRAY_SIZE(static_arr)); // 输出5
int* dynamic_arr = malloc(5 * sizeof(int));
size_t dynamic_len = 5;
// 需手动管理dynamic_len
free(dynamic_arr);
return 0;
}
C语言中需通过编程约定(如宏或手动记录)管理数组长度,这是其底层特性的体现。动态数组需特别注意内存和长度的同步管理。