这道题主要牵涉到指针:
1)第一个printf 的值:
有 struct str1 *p[2];
p[0]=&s1[0];p[1]=&s1[1];
可得到*(p+1)指向s1[1](即 "IJK","LMN")。
又因为 ++ (*(p+1))->s意思是指向字符串 "IJK" 的指针自增1,所以打印值为 JK
2)第二个printf的打印值:
有 struct str2
{
struct str1 sr;
int d;
}s2={"OPQ","RST",0}; 和 s2.sr.c[2] 是指向字符串 "RST" 的第三个字符 T,(因为数组从0开始,c[2]为第三个字符),即结果为 T。
故输出为 JKT
printf ("%s",++(*(p+1))->s; //为行少一个括号 printf ("%s",++(*(p+1))->s);
你得说一下你想要干嘛,程序添加一个括号也只输出了三个字符"JKT"