请教一道结构指针题目

来源:百度知道 编辑:UC知道 时间:2024/06/09 00:02:43
下面程序的输出结果是____。
#include "stdio.h"
struct str1
{ char c[5];
char *s;
};
main( )
{ struct str1 s1[2]={ {"ABCD""EFGH"},{"IJK","LMN"} };
struct str2
{ struct str1 sr;
int d;
}s2={"OPQ","RST",32767};
struct str1 *p[2];
p[0]=&s1[0];
p[1]=&s1[1];
printf("%s",++p[1]->s); /* ① */
printf("%c",s2.sr.c[2]); /* ② */
}
① A) LMN B) MN C) N D) IJK
② A) O B) P C) Q D) R
为什么答案是B,C,请高人指点一下谢了

① ++p[1]->s
指针的优先级高于加加。
先得到p[1]->s,p[1]指向s1[1],s1[1]的定义是{"IJK","LMN"},所以p[1]->s就是"LMN"。
再计算++,即从第二个字符开始,所以是"MN".

②s2.sr.c[2]
s2={"OPQ","RST",32767}
s2.sr就是{"OPQ","RST"}
s2.sr.c是"OPQ"
s2.sr.c[2]就是'Q'

程序的编译有点问题,分号和逗号都打成全角了,要改成半角。