设有以下语句,下列表达式中值为6的是()。
struct b
{
int x;
struct b *next;
};
struct b a[3]={5, &a[1],7,&a[2],9,’\0’},*p;
p=&a[0];
A (*p).x++
B p++->x
C ++p->x
D p->x++
答案是C。
a选项 ++后缀是左结合,所以先(*p).x 然后表达式的值就是5,运行完这个语句后p->x的值加一。
b选项 ++后缀是左结合,所以p++先执行,p++表达式的值为p,所以p++->x是5
c选项 ++前缀是右结合,所以是 对p->x的值加1,为正确选项
d选项 ++后缀是左结合,所以先p->x, 根据++后缀的特点知:p->x++表达式的值为5,执行完毕后p->x的值加一。