++(*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 不正确嘛?
请帮忙分析!
{
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