能帮我解释下这段程序的执行结果吗?

struct ks
{
int a;
int *b;
}s[4], *p;
main ()
{
int n = 1, i;
for (i = 0; i < 4; i++)
{
s[i].a = n;
s[i].b = &s[i].a;
n = n + 2;
}
p = &s[0];
p++;
printf ("%d,%d\n", (++p) -> a, (p++) -> a);
}

慕的地6264312
浏览 377回答 1
1回答

慕森王

分析:一:struct ks{int a;int *b;}s[4], *p;定义了两个结构体变量, 分别是数组s和指针p.二:main函数中的for语句是给数组变量s赋值. 数组s的每个元素的成员指针变量b都指向了它本身的成员变量a.赋值完后, s[0].a = 1, s[1].a = 3, s[2].a = 5, s[3].a = 7 .且, s[0].b = &s[0].a, s[1].b = &s[1].a, s[2].b = &s[2].a, s[3].b = &s[3].a&nbsp;三:p = &s[0];//结构体指针变量p指向了结构体数组变量s的第一个元素.p++;//p指向了结构体数组变量s的第二个元素, 即s[1]的首地址.四:++p是先做++运算再取p的值, 而p++是先取p的得, 再做++运算.故对于最后的打印语句:printf ("%d,%d\n", (++p) -> a, (p++) -> a);由上述的分析, 这时(++p)指向了s[2]的首地址. 所以(++p) -> a 的值是s[2].a的值, 即为5而(p++)是指向了s[1]的首地址. 所以(p++) -> a的值是s[1].a的值, 即为3.故最后的结果是: 5,3
打开App,查看更多内容
随时随地看视频慕课网APP