GESP 三级 · GESP 202603 C++ 三级 第 11 题

选择题 · 答案 B

← 整套速查表 GESP 三级 全部真题

题目

执行以下代码后,输出结果是:( )。

int arr[] = {5, 10, 15, 20, 25, 30};
int count = sizeof(arr) / sizeof(arr[0]);
cout << count;
答案:B

解题思维

答案B。数组和位运算的代码追踪要特别小心:数组下标从0开始,位运算结果可能不直观。建议画图辅助。

常见错误

位运算追踪时建议把数字写成二进制形式再逐位计算。

详细解析(节选)

【考点】数组元素个数计算|sizeof运算符

这道题考的是C++数组的内存布局理解,命题人专门把sizeof这个运算符塞进数组场景,就是要卡住那些只背"数组元素个数=长度"结论却不懂sizeof本质的人。

完整思考链:arr是6个int的连续内存块,sizeof(arr)返回整个数组占的字节数(6×4=24),sizeof(arr[0])返回单个元素占的字节数(4),相除自然得到元素个数6。记住这个通法:对C/C++原生数组,sizeof(array)/sizeof(array[0])永远等于元素个数;但对vector、string等容器要调用.size(),对指针要配合length()——这是同一考点在不同场景的变形。

逐个选项拆解:A的4是数组下标范围[0,3]的个数,命题人借用了C语言下标从0开始的概念偷换概念;C的24正是sizeof(arr)的原始值,只背公式不读题的人最容易栽跟头;D的30是数组最后一个元素值,命题人把元素值混进运算结果来制造视觉干扰。最阴险的是——如果你只背结论"数组元素个数=长度",看到sizeof(arr)就下意识想"6啊",完全忽略运算符的语义,这题直接就能把结论反杀。

反命题思维:如果arr改成int*arr=new int[]{5,10,15,20,25,30};,sizeof(arr)变成指针大小(4),结果就是1;如果改成std::vector<int> arr{5,10,15,20,25,30},sizeof(arr)是24,再除4得6,但vector.size()才是正解。刷到这类题先问自己:这个变量到底存的是数组对象还是指针?

在 OI伴学 里做这道题
登录后可计时作答、查看完整六段式解析,并按你的错题自动生成同类练习。
去刷题先做一次 AI 学情诊断