单选题
设有以下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的值又是不断变化的,所以相互之间会产生影响。