GESP 七级 · GESP 202506 C++ 七级 第 4 题

选择题 · 答案 D · 考点:指针与内存

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

题目

下列 C++ 代码的输出是( )。

#include <iostream>
using namespace std;

int main() {
    int arr[5] = {2, 4, 6, 8, 10};
    int * p = arr + 2;
    cout << p[3] << endl;
    return 0;
}
答案:D

考点

指针与内存

解题思维

仔细审题,明确已知条件和所求目标,运用相关知识点逐项分析。

常见错误

审题时注意题目要求(选正确还是选错误),避免因审题不清失分。涉及代码的题目要逐行分析变量变化。

详细解析(节选)

【考点】指针算术运算|数组越界访问|C++指针与内存模型

🎯 考纲定位 GESP 202506 C++ 七级"指针与数组"模块。命题人专挖"指针算术合法但越界访问非法"的认知盲区:多数学生以为arr+5就是"空指针",实则它只是地址偏移,真正陷阱在*(arr+5)这一行——这是七级高频考点,卡在"指针合法≠访问合法"的混淆上。

🧠 解题思维 看到p = arr + 2先定位初始地址,再看p[3]即*(p+3),计算得*(arr+5)。C++允许指针算术超出数组范围,但*(arr+5)属于未定义行为——输出结果完全取决于运行时内存布局,无法保证。

🪤 陷阱拆解 A项把p当arr用:p[3]是arr+5而非arr+3;B项误以为p[3]等于原数组第4位;C项最离谱——arr+5是合法指针(指向数组之后内存),编译只会报错,不会报"非法指针"。

🔄 反命题思维 若改为int arr[10],p[3]即arr[5]输出6;若改成int *p = arr + 3,则p[3]输出arr[6]。这类题本质考"指针算术与数组越界的边界",不是考"数组大小是否匹配"。

同考点真题

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