#include <iostream>
using namespace std;
struct point {
int x;
int y;
};
int main() {
struct EX{
int a;
int b;
point c;
} e;
e.a = 1;
e.b = 2;
e.c.x = e.a + e.b;
e.c.y = e.a * e.b;
cout << e.c.x << ',' << e.c.y << endl;
return 0;
} 输出:_________
这题就考结构体嵌套和成员访问,拿到题先别急着算,先把 e 里 a、b 赋了啥,再看 c 是个 point 类型,顺着点号一层层往里面钻,把 e.c.x 和 e.c.y 分别换成对应的表达式算出来就行。
很多同学在看到 e.c.x 时会愣住,以为要先算 e.c 这个整体,其实 e.c 本身就是一个 point 类型的变量,直接就能访问它的 x 和 y。另外点号运算符的优先级最高,e.a+e.b 里先算加法再赋值,千万别把 e.a+e.b 当成一个整体再去点成员。
这题核心就两点:结构体定义和成员访问。struct point 里有两个 int 成员 x 和 y;struct EX 里又嵌了一个 point 类型的成员 c。访问时要用点号,而且可以一层一层点:e.c.x 就是先找到 EX 里的 c,再找到 point 里的 x。
命题人最喜欢在结构体嵌套里设陷阱:
这题就是典型代表:e 里 a=1、b=2,c 是 point,然后 e.c.x 和 e.c.y 直接用了 a 和 b 的运算结果。