以下代码是一个程序的部分代码,能够正确执行,输出的结果是( )
int arr[5] = {1, 2, 3, 4, 5};
int p = arr[1];
cout << (p + 2) << endl;答案D。数组和位运算的代码追踪要特别小心:数组下标从0开始,位运算结果可能不直观。建议画图辅助。
位运算追踪时建议把数字写成二进制形式再逐位计算。
【考点】数组访问|下标规则|基本输入输出
GESP 三级明确考察数组基础操作。命题人特意用 arr[1] 卡住大量初学者——他们死记"第一个元素是 1"却不懂 0 基下标规则。这种陷阱在后续章节会反复出现,必须现在纠正。C++ 数组从索引 0 开始,arr[1] 是第二个元素。
看到定义先定位下标:arr[0]=1,arr[1]=2。p 被赋值为 2。再执行算术 p+2 得 4,cout 输出 4。这是最直接的数组访问流程。注意这里没有循环或条件判断,纯线性执行。
A 选项源于"下标=序号"的致命误区;B 选项是正确取值却漏了加法;C 选项纯属随机干扰。最阴险的是 arr[1] 被解读为第一个数,暴露对 C++ 数组 0 基的无知。很多人会选 A 或 B,因为它们看起来"合理"。
若改为 arr[6]={1,2,3,4,5,6} 并问 arr[5],答案变 6 而非 5;若改为 arr[0]=100 并求 arr[1]-arr[0],答案变 98。刷到同类题先问:下标真的对应序号吗?加法漏没漏?边界值有没有越界?