题目
宏求数组元素个数
思路
本题用宏求数组元素个数(不是字节数)。
#define LEN(arr) (sizeof(arr)/sizeof((arr)[0])) 只对定义处的数组名有效;若形参已退化为指针,sizeof 不再是整个数组长度。
解题分析
sizeof(a)/sizeof(a[0]) 仅当 a 是编译期数组名时有效;若 a 是函数参数退化的指针,sizeof(a) 是指针大小,不能用来求元素个数。
完整程序
#include <stdio.h>
#define ARR_LEN(a) (sizeof(a) / sizeof((a)[0]))
int main(void)
{
int a[] = {1, 2, 3, 4, 5};
printf("%zu\n", ARR_LEN(a));
return 0;
}
运行示例
程序不需要从键盘读入,直接运行。输出如下:
5