单选题 设有以下C语言说明语句,则值为210的表达式是{{U}} {{U}} {{/U}} {{/U}}。
struct s
{ int a;int *b;};
Int x0[]={110,120},x1[]={210,220};
struct s x[]={{100},{200}},*p=x;
x[0].b=x0;x[1].b=x1;
  • A.(++p)->a
  • B.*p->b
  • C.*(p++)->b
  • D.*(++p)->b
【正确答案】 D
【答案解析】[解析] 注意到本试题中x为结构体数组,则数组名x代表数组首地址。x[0]、x[1]代表结构体数组元素。对于指向结构体数组的指针变量p,每次“+1”则指向下一个结构体数组元素。本题中 ++p后,由x[0]改指向x[1]。 结构体数组x在定义时赋初值,但未对结构体成员b赋初值。语句“x[0].b=x0;x[1].b=x1;”的作用是对结构体数组x的成员b赋初值。 对于选项A,(++p)->a等价于x[1].a==200。 选项B,*p->b等价于*(x->b)==*x0==110。 选项C,*(p++)->b等价于*(x[0].b)==110=x0[0]。 选项D,*(++p)->b等价于*(x[1].b)==210=x1[0]。 注意,在测试以上1个选项的输出值时,不能放在同一个printf函数中进行输出。因为函数中的参数运算顺序在C语言中是自右向左进行的,而p的值又是不断变化的,所以相互之间会产生影响。