下面程序的输出结果为( )。 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

admin2010-01-10  22

问题 下面程序的输出结果为(  )。    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

答案4

解析 第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为所选。
转载请注明原文地址:https://jikaoti.com/ti/WNI0FFFM
0

最新回复(0)