在如下的 C++ 代码执行后,设第 11 和 12 行的输出地址值分别为 $X$ 和 $Y$,则下面正确的是( )。
struct pass {
int no;
char name[20];
int level;
};
int main()
{
struct pass XiaoYang;
cout << "&XiaoYang=" << &XiaoYang << endl; //第11行
cout << "&(XiaoYang.no)=" << &(XiaoYang.no) << endl; //第12行
cout << endl;
return 0;
}答案B。指针和数组的代码追踪:画出变量和指针的内存示意图,追踪每次赋值后值的变化。
指针和数组追踪时画内存布局图可以大大简化理解。
【考点】结构体内存布局|指针地址运算|变量作用域
本题考查 GESP C++ 四级大纲中"结构与数组"模块的核心考点——结构体内存布局。命题人故意用&XiaoYang和&(XiaoYang.no)两个取地址操作,卡住的是考生对"成员地址与结构体地址关系"的直觉误区:以为取结构体地址是取整体,取成员地址是取局部,从而产生大小关系。