题目

使用预处理宏 ARRAY_SIZE(arr) 在编译期安全计算栈数组中包含的元素个数。

输入格式:无键盘输入(程序内置固定大小的测试数组)。

输出格式:输出宏计算出的数组元素数量,末尾换行。

数据范围与约定:适用于静态/自动存储期的原生数组。

思路与算法

1. 经典容量宏定义
#define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]))。用整个数组占用的总字节数除以单个元素的字节大小。

2. 适用边界与陷阱
该宏只在原生数组的定义作用域内有效!若将数组名作为形参传递给函数,数组名退化为指针,sizeof(arr) 将得到指针长度(4 或 8 字节),计算结果会出错。

完整程序

public class Main {
    public static void main(String[] args) {
        // Java 数组自带 length 属性,相当于 C 语言的 sizeof(arr)/sizeof(arr[0])
        int[] arr = {10, 20, 30, 40, 50};
        System.out.println(arr.length);
    }
}

运行示例

输出:

5