结构编程pta程序练习


struct table {
   int x, y;         
}a[4]={{10, 20}, {30, 40}, {50, 60}, {70, 80}};
struct table *p = a;

printf("%d,", p++->x);   /* 以下输出数据之间没有空格分隔 */
printf("%d,", ++p->y);
printf("%d", (a+3)->x);  

写出下面程序段的运行结果
我的答案是30,21,70 是错误的,求帮助!

img

img

所以先输出10.然后p指针自增1

img

因为p前面已经自增1了,所以取出的是a[1]的y并加1

第三个就很容易理解,就是取a[3]的x值。

望采纳!

该回答引用ChatGPT

新的解释
首先,定义了一个结构体数组a,其中存有4个元素,每个元素有x,y两个成员。然后定义了一个结构体指针p,初始化为a。

第一个printf语句中,p++->x表示先将p指针加1,再取出它指向的结构体中x的值。因此,p++->x等价于(p + 1)->x,即取出数组a中下标为1的元素的x值。因此,p++->x输出30。

第二个printf语句中,++p->y表示先将p指针指向的结构体中的y值加1,再将p指针加1。因此,++p->y等价于++(p->y),即将数组a中下标为1的元素的y值加1。因此,++p->y输出61。

第三个printf语句中,(a + 3)->x表示取出数组a中下标为3的元素的x值。因此,(a + 3)->x输出70。