给出程序如下,表达式++p->x和(++p)->x的值是多少?为什么?

来源:百度知道 编辑:UC知道 时间:2024/06/28 11:08:38
#include <stdio.h>

struct
{
int x;
int y;
}s[2] = {{1,2}, {3,4}},*p=s;

因为运算符的优先级不一样,决定了这两个表达式的计算方法不一样
第一个表达式++p->x,由于后一个的优先级高,因此先找到对于的x值为1,然后进行自加,结果为2;
第二个表达式中由于有括号存在,所以先把指针从s[0]的位置向后移动到s[1],因此结果为3.

++p->x

等价于++(p->x),即先将p->x的值加1,然后再使用加1后的值。

(++p)->x

是先将p移动到相邻的下一个元素,即指向s[1],之后再取出p->x的值(也就是s[1].x)

考虑到 运算符优先级 ->优先级 高于++ 有括号先算括号的

看看运算符优先级,你就明白了。。
++p->x是取了指针P指向的值之后做自加运算后的结果,
(++p)->x是指p指针指向下一个地址然后再取值