不灭武尊古飞的老婆:c语言问题

来源:百度文库 编辑:高校问答 时间:2024/05/02 20:15:46
【2.54】下面程序的输出结果是____。
#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

参考答案BC,要求有详细分析过程。
特别是p[1]->s指向"LMN"的首地址,为什么++p[1]->s输出的是MN?
为什么输出的不是M

#include "stdio.h"
struct str1 //结构体str1
{
char c[5];
char *s;
};
main( )
{
struct str1 s1[2]={ {"ABCD""EFGH"},{"IJK","LMN"} }; //创建str1类型实例数组s1
struct str2 //结构体str2
{
struct str1 sr;
int d;
}s2={"OPQ","RST",32767}; //创建str2实例s2

struct str1 *p[2]; str1类型指针数组p

p[0]=&s1[0]; p指向s1第一个元素
p[1]=&s1[1]; p指向s1第二个元素

printf("%s",++p[1]->s); /* ① */ 输出p[1]->s指向"LMN"的首地址`+1的结果,printf输出类型是string,所以一直到字符串结束才停止输出
printf("%c",s2.sr.c[2]); /* ② */ //printf输出类型是char,只输出1个字符
}