下面 C++ 代码执行后,输出的是( )。
int main()
{
int x[] = {2, 0, 2, 4};
char geSP[] = "Grade Examination of SP";
cout << geSP[sizeof(x)] << endl;
cout << endl;
return 0;
}这题别被"sizeof"吓住,核心就是算出数组占几个字节,再把这个数当成下标去串里取字符。int占4字节,4个元素就是16,直接去geSP[16]看是谁。
学生最容易把sizeof(x)当成元素个数4,直接选G;或者算字符串长度时忘了末尾的\0,把26当长度,去查geSP[26]选P;还有人会混淆下标和字节数,以为下标就是字符数,其实下标16对应的是第17个字符的位置,正好落在'n'上。
【考点】sizeof运算符|数组内存布局|字符串存储
这道题考的是C++里sizeof运算符的底层含义和数组在内存中的真实占用。命题人故意用sizeof(x)去索引char数组,卡住的是考生对"数组元素个数"和"数组总字节数"的混淆——绝大多数人看到sizeof就以为是下标,却忘了它返回的是总字节数。
先算x的总字节:int占4字节,4个元素共16字节,因此sizeof(x)=16。再看geSP是字符串"Grade Examination of SP",共26个字符+1个\0,总长27字节,下标16对应的是'n'(G=0、r=1、a=2、d=3、e=4、空格=5、E=6、x=7、a=8、m=9、i=10、n=11、a=12、t=13、i=14、o=15、n=16)。
【陷阱拆解】选项A(G):把sizeof当成元素个数,误以为sizeof(x)=4,直接取第一个字符。选项B(e):误以为是第5个字符,把下标当成4。选项D(P):误以为sizeof返回的是字符串长度,只算26,却忘了\0的存在,或者把sizeof(x)算成25(误以为int占4字节但sizeof只算元素个数)。最阴险的细节是"绝对化表述":题干里sizeof(x)没有加sizeof(char),考生若只背"数组下标从0开始",就会忽略sizeof返回的是字节数。
【反命题思维】如果把x改成char x[]="abc",sizeof(x)就是4,去查geSP[4]就是空格,答案会变。刷到类似题,先问自己:"sizeof到底返回的是元素个数还是字节数?"
【考频趋势】基础语法在题库共考过1295题,覆盖11个考试级别(2008-2026);逐年分布:2008年1题、2011年1题、2019年3题、2023年287题、2024年413题、2025年401题、2026年109题、null年80题。分赛事:GESP 一级332题、GESP 二级283题、GESP 三级215题、GESP 四级186题、GESP 七级91题、GESP 八级79题、GESP 六级78题、GESP 五级23题、CSP 提高级3题、CSP 入门级3题、NOIP 提高组 初赛2题。
【预测】基础语法在2024年考了413题,2025年考了401题,连续两年都是最高频考点,且GESP四级占比186题,说明这类"sizeof+数组+字符串"的陷阱题在未来GESP四级中仍会高频出现,命题人可能会继续用不同长度的数组和字符串组合来考察内存布局理解。暂无足够依据预测具体年份或题型变体。