CSP-J 入门级 · CSP 2026 入门级第一轮 第 11 题

选择题 · 答案 A · 考点:指针与引用、一维数组、指针与内存

← 整套速查表 CSP-J 入门级 全部真题

题目

【单选】执行下列代码,输出是( )。

int a[5] = {1, 3, 5, 7, 9};
int *p = a + 2;
*(p - 1) = p[0] + p[2];
p[1] = *(a + 1) - a[0];
cout << a[1] << "," << a[3];
答案:A

考点

指针与引用一维数组指针与内存

解题思维

先把 p 定位到 a[2],再用"p[i] 等价于 *(p+i)"逐条改写赋值语句,特别注意第一条赋值已经把 a[1] 改掉了,后面读 a[1] 要用新值。

常见错误

算到第二条时仍用 a[1] 的原始值 3(未察觉第一条 *(p-1) = ... 修改的正是 a[1]),从而得到 2 而不是 13;或把 p[2] 误当成 a[3]。

详细解析(节选)

解析

本题考查指针算术与数组元素的等价改写。

初始:a = {1, 3, 5, 7, 9},p = a + 2,即 p 指向 a[2],于是有映射关系:

表达式等价下标初始值
*(p-1) / p[-1]a[1]3
p[0] / *pa[2]5
p[1]a[3]7
p[2]a[4]9

逐句执行

**第 1 句:*(p - 1) = p[0] + p[2]; 左边指向 a[1],右边 = a[2] + a[4] = 5 + 9 = 14。 → a[1] 变为 14,数组变为 {1, 14**, 5, 7, 9}。

**第 2 句:p[1] = *(a + 1) - a[0]; 左边指向 a[3];右边 = a[1] − a[0] = 14 − 1 = 13(注意 a[1] 已被上一步改成 14!)。 → a[3] 变为 13,数组变为 {1, 14, 5, 13**, 9}。

输出:cout << a[1] << "," << a[3]; → 输出 14,13,选 A。

其他选项为什么错

记忆点

同考点真题

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