定义 double arr[10]; ,未手动初始化时,数组中所有元素的默认值为 $0.0$。
答案B。定义数组时[]内必须是常量表达式(可用char常量作为下标,因为char本质是整数)。int c[3.0]不合法。
C++不允许对数组直接赋值(如int a[3]=b不合法),但可以逐个赋值元素。
【考点】数组|内存分配|C++语言规范
🎯 考纲定位:本题考查 GESP 三级《C++ 语言基础》模块的"数组存储与默认值"考点。命题人专挑"未初始化局部数组"设坑,90% 考生误以为所有数组默认清零,实际 C++ 只保证全局/静态数组初始化为 0,局部数组未初始化时是"未定义值",这题就是卡住对存储类别理解的薄弱点。
🧠 解题思维:看到数组定义先定位存储类别——arr 是局部变量,生命周期在栈上,未显式初始化则每个元素是随机值(垃圾值)。题目说默认值 0.0 绝对化,违反 C++ 标准;正确推论是"未定义",不能假设任何具体数值。通法:凡涉及数组/指针默认值,先问"作用域"(全局/静态 vs 局部),再问"是否显式初始化",最后结合类型推断(int 0, double 0.0),切忌直接背诵"数组默认 0"。
🪤 陷阱拆解:选项 A 错误源于"所有数组默认 0"的绝对化表述,命题人利用初学者对 C 语言初始化习惯的迁移(C 语言全局数组自动 0,局部数组需手动),偷换概念把"全局/静态"偷成"所有";最阴险细节是"未手动初始化时"这个限定,暗示局部数组,但考生容易忽略作用域差异,直接套用全局规则。只背结论的人看到"数组"就选 0,掉进存储类别陷阱。
🔄 反命题思维:若把 arr 改为全局或静态,答案变 A;若改成"未定义值"描述,答案变 A;若改成"sizeof(arr)==40"判断,答案变 A。刷到类似题,先问"命题人是不是在考存储类别或初始化规则",别被"数组"表象带偏。