GESP 四级 · GESP 202406 C++ 四级 第 15 题

选择题 · 答案 D

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

题目

下面程序中,如果语句 cout<<p<<endl; 输出的是 0x6ffe00,则 cout<<++p<<endl; 输出的是( )

int x[10][10][10]={{0}};
int *p;
p=&x[0][0][0];
cout<<p<<endl;
cout<<++p<<endl;
答案:D

解题思维

答案D。二进制转十进制:整数部分按权展开,小数部分乘以2的负幂次。

常见错误

二进制小数转十进制:小数点后第一位是2⁻¹=0.5,第二位是2⁻²=0.25。容易忽略负幂次。

详细解析(节选)

【考点】指针算术|多维数组内存布局|sizeof

这题考的是指针自增的底层含义。**p 是 int* 类型**,++p 不是"地址+1",而是"地址+sizeof(int)"——这是指针算术的通性,任何指针类型都遵循。

初始 p=&x[0][0][0] 指向第一个 int,输出 0x6ffe00 说明这个位置刚好落在 4 字节边界上(3D 数组在内存里是连续存放的,每个 int 占 4 字节)。++p 后 p 移到下一个 int 位置,地址就是 0x6ffe00+4=0x6ffe04,对应选项 D。

命题人套路:故意用多维数组迷惑人,其实只要聚焦"p 是 int*,++p 加几个字节"就能秒杀。那阴险细节在于——它没问 p 值变化,而是问地址变化,如果你把++p 当成"值加1"就会选 A(0x6ffe0c 是加了 12,以为是 x[0][0][3] 的地址)。

反命题视角:把++p 改成 p+=2 答案还是 D;把 p 改成 char* 则++p 只加 1 字节。这类题本质都在考"指针类型决定步长",下次刷到先问自己:p 是什么类型?++p 加几个字节?

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