下面程序的输出结果为( )。
struct st int x;int *y;*p;
int dt[4]=10,20,30,40);
struct st aa[4]=50,&dt[0],60,&dt[1],70,&dt[2],80,&dt[3];
main()
p=aa;
printf("%d\n",++p->x);
printf("%d|n",(++p)->x);
printf("%d\n",++(*p->y));
A.10
20
20
B.50
60
21
C.51
60
21
D.60
70
31
参考答案:C
解析: 第1个输出语句中由于->的优先级高于++,因此先取结构体的分量x,再对x的值加1,再输出。p的初值为结构体数组aa的首地址即a[0]的地址,a[0]的x分量值为50,加1后输出51。第2个输出语句中++p被括号括起来,括号的优先级与->相同,自左至右结合,因此先对p加1,再取p所指向的元素的x分量的值。p加1后p指向数组元素a[1],a[1]的x分量的值为60,输出60。第3个输出语句中括号的优先级高于++,因此先求括号中表达式的值,又由于->的优先级高于*,所以先取p所指向的数组元素的y分量的值,p所指向的元素为a[1],y分量的值为&dt[1]。&dt[1]是一个存储单元的地址,是数组dt第2个元素的地址值,再取该存储单元中的值为20,最后对20加1,输出21。选项C为所选。