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

判断题 · 答案 A

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

题目

下面代码输出的值等于 $0$。

#include<iostream>
using namespace std;
int main()
{
    int *p=NULL;
    cout<<p<<endl;
}
答案:A

解题思维

答案A。指针和数组的代码追踪:画出变量和指针的内存示意图,追踪每次赋值后值的变化。

常见错误

指针和数组追踪时画内存布局图可以大大简化理解。

详细解析(节选)

【考点】指针与NULL值|cout输出重载|GESP四级语法

本题考查GESP四级C++语法中指针基础与输出重载。命题人用"输出NULL"卡住那些把指针地址和指针值混淆的考生,毕竟四级不考复杂指针运算,但必须分清p本身存的是地址,而cout<<p输出的是p指向的值。

解题链条:①int *p=NULL把p初始化为0;②cout<<p调用ostream::operator<<(void*)重载,直接输出指针存储的数值(即地址);③因为p是0,所以cout输出0。通法是遇到指针输出时,先确认是输出指针本身还是解引用结果,四级只涉及指针本身。

陷阱在于绝对化表述"输出的值等于0"。若考生误以为cout输出的是p的地址(即&p),就会选错。命题人利用"指针是地址"这一常识偷换概念——p的值就是地址0,而非p变量自身的地址。只背结论"NULL输出0"而不理解cout重载机制,就会在变式题上当坑。

反命题视角:如果把cout<<p改成cout<<&p,答案就变成非零地址;若改成cout<<*p,则涉及空指针解引用,四级范围外但可推演为异常。刷到类似题时,先问自己"命题人想考我指针值还是指针地址",再决定输出形式。

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