在 C++ 中,执行下面代码后,输出的是( )。
int point(int *p)
{
return *p**p;
}
int main()
{
int a=20;
int *p=&a;
*p=point(p);
cout<<*p<<endl;
}这题核心就是追指针指谁、函数返回谁、赋值后谁变了。先画出 a 和 p 的内存关系,再看 point(p) 里 *p**p 到底算的是 a*a 还是 a*(&a),最后把返回值赋回 *p 后 cout 输出的是新值。
容易把 **p 当成 p 本身或 p 的地址,从而算成 20*20=400 误选 D;或者忽略 *p=point(p) 这行赋值,以为 a 没变,直接选 C;还有人会把 *p**p 看错成 *p 乘以 p 的地址,得到 20*20=400 却误以为是 B 的 200。其实 **p 就是 a,所以 point(p) 返回 400,赋值后 a 变成 400,输出就是 400。
C++ 四级内存管理模块必考题,命题人专查你是否真的理解“指针是变量的地址”,而不是死记语法。这题把指针、解引用、函数传参、自调用揉在一起,卡住那些把指针和地址混为一谈的考生。