定义 int arr[5] = {1,2,3}; ,则 arr[3] 的值为 $0$,arr[5] 是合法下标。
答案B。定义数组时[]内必须是常量表达式(可用char常量作为下标,因为char本质是整数)。int c[3.0]不合法。
C++不允许对数组直接赋值(如int a[3]=b不合法),但可以逐个赋值元素。
【考点】数组定义|数组越界|初始化列表
定义int arr[5] = {1,2,3};时,数组大小为5,下标范围0~4。未显式赋值的元素自动初始化为0,故arr[3]=0正确;但arr[5]已越界,C++不检查边界,访问arr[5]是未定义行为,命题人用"合法下标"测试学生是否真正理解数组索引从0开始。
常见陷阱:误以为arr[3]是未初始化(实则已归零)、误把数组大小5当成最大下标(应为4)、误认为arr[3]的值是3(实际是下标)。命题人特意用"合法下标"这种绝对化表述,诱导只背结论不推敲边界的考生选A。
若将数组大小改为3,则arr[3]越界;若初始化改为{1,2,3,4},则arr[3]为4。这类题永远要问自己:"下标是从0开始还是1开始?数组大小和下标最大值的关系是什么?"