C语言选择题———关于++和->和 . 的优先级以及结合性

设有以下语句,下列表达式中值为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的值加一。

 


版权声明:本文为weixin_42765365原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。