以下代码的输出是什么?
int main() {
int a = 10;
int *p = &a;
int *&q = p;
*q = 20;
cout << a << endl;
return 0;
}函数指针:bool (*Fx)(int) 声明一个指向"接收int返回bool"的函数的指针,可作为参数传递给其他函数(回调机制)。
函数指针和普通指针不同,函数指针指向的是代码段中的函数入口地址。声明格式:返回类型 (*指针名)(参数列表)。
本题出自GESP七级大纲"指针与引用"专题。命题人卡住的是绝大多数C++初学者对引用传递机制的模糊认知——他们知道引用是别名,但面对"引用的引用"(引用到指针的引用)时,往往混淆"多级引用"与"多级指针"的区别。七级在此处设置了概念辨析门槛。
代码执行链:a 是普通变量,p 是指向 a 的指针(存储地址),q 是对指针 p 的引用。关键点在于:q 与 p 同指内存中同一个指针对象,而非 q 指向 p 的值。因此 *q 等价于 *p,即对 a 进行解引用赋值。通法:遇到"引用的引用",先识别内层引用指向的对象类型(这里是指针),再判断外层引用是否改变了该对象的指向——本题答案为20。