题目

宏求数组元素个数

思路

本题用宏求数组元素个数(不是字节数)。

#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