已知数组 a 定义为 int a[100];,则赋值语句 a['0'] = 3; 会导致编译错误。( )
别被单引号唬住,这题核心就是考字符常量在 C++ 里的真实类型。拿到题先反应:'0' 是字符还是字符串?字符常量本质是 int,ASCII 码 48 正好在 0-99 范围内,所以完全合法。
最容易栽跟头的是把字符常量当成字符串字面量,或者死记硬背'字符不能当数组下标'这种片面结论。命题人专门用 '0' 这种看似字符实则整数的下标来挖坑,考的就是你是否真正理解 C++ 里字符常量的类型是 int,而不是 char。
【考点】数组下标合法性|字符常量类型|ASCII 码
这道题属于复合类型与一维数组的结合,在 GESP 四级中是高频考点。命题人特别喜欢用字符常量当数组下标,就是为了卡住那些只背结论、不追本原的学生。
解题心法很简单:看到 a['0'] 先别慌,拆解三步。第一,确认 '0' 是字符常量而非字符串字面量(单引号才是字符,双引号才是字符串);第二,回忆 C++ 里字符常量的本原类型是 int;第三,验证 '0' 的 ASCII 码 48 是否在 0-99 范围内。三步走完,结论自然浮现:这行代码编译通过,题目说"会导致编译错误"是错的,所以选 B。
这里有个关键概念必须讲透:在 C++ 中,单引号括起来的字符常量(如 '0')并不是 char 类型,而是 int 类型,它的值就是该字符的 ASCII 码。'0' 的 ASCII 码是 48,'A' 是 65,'a' 是 97。既然 a 数组长度是 100,下标范围是 0 到 99,那么 48 完全合法。很多学生死记"字符不能当数组下标",其实那是错的,正确说法是"字符常量的值(即 ASCII 码)作为下标是合法的"。
命题视角上,这类题往往混淆字符和字符串。如果改成 a["0"],那 "0" 是字符串字面量,类型是 const char[2],赋值给 int 数组元素会报错;如果改成 a['A'],依然是合法的。刷到这类题先问自己:命题人是用字符/字符串混淆,还是用类型/范围设障?
【考频与趋势】复合类型在 GESP 四级中占比不高,但一维数组是四级重灾区,考频逐年攀升:2023 年 27 题、2024 年 48 题、2025 年 55 题、2026 年 59 题,四级组一维数组已占 42 题,是四级考试的核心。字符常量作为下标的考法在四级出现过 2 次左右,属于小概率但高区分度的陷阱题。
【预测】结合数据,未来四级大概率继续加大一维数组下标合法性的考查力度,可能会在数组定义不同(如 int a[256])或下标不同(如 a['A']、a['a'])的变体中反复出现,目的是区分是否真正理解字符常量本质。