下列关于 C++ 语言中数组的叙述,不正确的是( )。
这题考 C++ 数组定义规则。拿到题先盯死 C 选项,因为‘字符数组例外’是命题人最爱挖的坑,其他选项都是数组铁律,一眼就能排除。
学生最容易掉进‘字符数组不需要常数下标’的陷阱,觉得 char s[100] 可以写成 char s[n] 而不报错,其实 n 必须是编译期常量。另外有人会误以为数组整体赋值合法,其实 C++ 数组名退化为指针,整体赋值是非法的。
A 选项「数组必须先定义后使用」——这是 C++ 的铁律,变量未定义就使用会编译报错,正确。
B 选项「数组所有元素在内存中连续存放」——这是数组的本质定义,区别于链表,正确。
D 选项「不能对数组赋值,但可以对每个元素赋值」——C++ 里数组名退化为指针,整体赋值如a = b是非法的,但a[0] = 1完全合法,正确。
C 选项「除了字符数组,在定义数组时[]内必须有常数」——命题人设了个双重陷阱: 1. 前半句暗示字符数组不需要常数下标,诱导你想起char s[100];这种写法,其实这只是初始化时的特例,定义时依然需要常量; 2. 后半句绝对化表述「必须有常数」,忽略了动态数组(如int n; a[n])的合法性。
所以 C 是错的,答案选 C。