首先,输出是 3 4 1 4 ,因为你打印是两位的,即%2d,而实际上只有一位,所以每个数前面都会有一个空格,再说一下原因。
按照你的定义方式,x[]数组中,有三个st2类型的元素,第一个元素x[0]中a=1,b=2,第二个元素x[1]中a=3,b=4,x[2]中a=5,b=6。所以前两个输出结果可想而知。
同时p指针开始指向x[0],而p++中,++这个运算符当前语句执行完后才生效,所以,打印的仍然是x[0]中的a值,即 1。最后一个输出中,“->”符号的优先级高于++,同时,此时p指向x[1],故p->a 的值是3,再将3自加,结果就是4了。希望你能明白。
大哥,你就那么懒得打么?郁闷,看不清楚,太小了
main()
{ struct st2{int a,b;}x[]={1,2,3,4,5,6},*p=x;
printf("%2d",x[1].a);// 2
printf("%2d",x[1].b);// 2
printf("%2d",p++->a); // p原来指向x[0]也就是这个数组的首地址,所以是1
printf("%2d",++p->a);// 因为上面是p++,到了下面p就是2了,又因为这里是++p,所以是3
}
这题很简单呀,显然x数组是这样的 struct st2 类型的 元素个数是3个, 即x[3] = {{1,2},{3,4},{5,6}}; *p = x;即p指向这个数组的首地址.显然第一个printf语句结果为3,第二个printf语句的结果为4,第三个printf语句(由于是后++,先取值,后自增)结果为printf("%2d", p->a);为1,第四句为前++,又由于第三句p已经加过一次,第四句在加一次,所有p指向3的位置,所以结果为3.