关于运算符优先级的问题。急求指导。

1、

 struct num
{int a,b;}s[]={{1,6},{2,3}},*p=s;
printf("%d",p->b/s[1].a*++p->a);

为什么输出6?先算p->b再算s[1].a,之后是++p->a,最后算乘除对吗。
++p->a为什么是2?->的优先级不是比++高么,为什么不是先取值再++
2、

 static int a[10]={1,3,5,7,9};
int *p=a;
printf("%d",*p++**++p);

为什么结果是9.运算顺序是什么。

C++ 运算符优先级列表

先 -> ,再 ++,然后 / 和 * 按顺序运行,结果确实是 6。
关键是 ++p->a 的顺序,结果是:2,最后 6 / 2 * 2,所以结果是 6。

  • 是 right to left,所以后面的 ++ 先运行,p = 3。前面的 ++ 要运行后才自加 1,所以不影响运行的结果。 所以结果是: 3 * 3 = 9

第二个的运行结果与下面的代码相同:
还是先计算了 (*++p)。

 static int a[10]={1,3,5,7,9};
    int *p=a;
    int i2 = (*++p);
    int i1 = (*p++);
    int iRe = i1 * i2;
    printf("%d",iRe);