++(*p).n 与++p->n 有什么区别?

来源:百度知道 编辑:UC知道 时间:2024/07/05 13:41:44
struct st
{
int n;
struct st*next;
}
strut st a[3],*p;

a[0].n=5;
a[0].next=&a[1];
a[1].n=7;
a[1].next=&a[2];
a[2].n=9;

a[2].next='\0';
p=&a[0];

则以下值为6 的表达式是:

a) p++->n
b) p->n++
c) ++(*p).n
d)++p->n

答案是d,那么c 不正确嘛?

请帮忙分析!

1、操作符的优先级在++(*p).n这个式子中的优先级是最高的,所以会先计算(*p).n的值,也就是a[0].n,再计算前缀++,所以最终结果是6。
2、->操作符的优先级高于前缀++操作符的优先级,所以在++p->n中会先计算p->n的值,同样也是a[0].n,然后再计算前缀++,所以最终结果也是6。
3、因此,C和D都正确。

++(*p) 表示把p的内容++ ;对于struct st,则没有++运算,更不会有后面的++(*p).n了。
++p则表示把p指针后移到下一struct st结构体。

.操作符的优先级在++(*p).n这个式子中的优先级是最高的,所以会先计算(*p).n的值,也就是a[0].n,再计算前缀++,所以最终结果是6

->操作符的优先级高于前缀++操作符的优先级,所以在++p->n中会先计算p->n的值,同样也是a[0].n,然后再计算前缀++,所以最终结果也是6

因此,C和D都正确。

(*p)==a
++(*p).n===++a[0].n