C语言高手,救命啊!!!下面这段程序的运行结果是多少啊?

来源:百度知道 编辑:UC知道 时间:2024/04/29 05:58:24
#include<stdio.h>
struct ks
{int a;
int *b;
}s[4],*p;
main()
{int n=1,i;
printf("\n");
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);
}
请真正的高手回答,上机运行结果是7,3.我只是不理解为什么是这样.
能给我解释一下吗?我脑子很笨的……

函数printf从左往右读取,然后将先读取放到栈底,最后读取的放在栈顶,处理时候是从栈顶开始的,所有我们看见的结果是从右边开始处理的。

关键是最后这一句,我们看到的结果是从右边开始处理的。

也就是说p在最后输出的时候虽然指向的是s[1],但是因为最后的那个p++操作使p指向了s[2],而++p操作又使p指向了s[3],所以输出的就是s[3]和s[1]这两个数了。

括号不匹配...

5,3

7和3