下面 C++ 代码执行后,输出的是( )。
int arr[10]={1};
string strArr="chen a dai";
cout<<strArr[arr[1]]<<endl;这题考数组默认初始化和字符串下标取值。拿到题别急着看串,先算arr[1]是多少(默认全0),再拿这个数去串里取字符,答案就是串首。
最容易栽在两个地方:一是以为int数组会自动把下标1赋成1,其实默认全是0;二是看到strArr[arr[1]]就脑补成取整个串,忘了数组下标访问出来的是单个char。这两点叠加,很多人会选A或C,完全跑偏。
【考点】 数组默认初始化规则、字符串下标取值、字符与下标对应关系
1. 命题人怎么挖坑 这道题是典型的“陷阱题”。命题人故意用int arr[10]={1};来诱导学生。看到{1},直觉上会觉得“下标1是1”,从而直接去串里取第1个字符(即'c'),或者更离谱地认为整个串被赋给了arr[1]。但C++数组的初始化规则是:只初始化显式给出的部分,剩余部分自动补0。所以arr[0]=1,arr[1]到arr[9]全都是0。这是绝大多数初学者会忽略的默认行为,也是本题的核心考点。
2. 概念讲明白
string类型的下标访问返回的是char,不是string。比如strArr[0]就是第一个字符,不会把整个字符串打印出来。3. 思考心法:拿到题先想什么 看到cout<<strArr[arr[1]]<<endl;,别急着看strArr是什么,先处理下标表达式 arr[1]。这是所有“数组当索引”题的通法:先算出下标值,再查表。所以第一步就是算arr[1]等于几。
4. 一步步推演
arr的定义。int arr[10]={1};。根据默认初始化规则,arr[0]=1,arr[1]=0,arr[2]=0……直到arr[9]=0。arr[1]的值是0。strArr。string strArr="chen a dai";strArr[0]取的是字符串的第一个字符,即'c'。cout输出字符'c',然后换行。5. 避坑指南
strArr[arr[1]]误认为是整个字符串赋值或输出。记住,数组下标访问出来的是单个元素,不是整个容器。arr[1]是1,然后去取串里第1个字符(索引1),即'h',或者误以为arr[1]是串尾。其实arr[1]是0,取的是第一个字符。最阴险的是,很多人背结论“下标1就是第1个”,忘了数组下标从0开始,且arr[1]本身是0。6. 考频与趋势
7. 预测 基于给定数据与经验,暂无足够依据预测未来可能怎么考。