各位帮我注释一下为什么是输出8和32,我错误理解是分别输出61和32

#include<stdio.h>
void main()
{
    int a[4]={8,61,32,53},*p;
    p=&a[2];
    printf("%d,%d\n",*--p,*p--); 
 } 

不同编译器,好像结果不一样?

img

从右向左执行
先得到32 后置--变61
前置--得8

尽量不要一行写多个自增自减运算符,容易出问题,就比如你这种,真要解释话,我认为不同编译器也不同,依据答案解释的话,就是p先减了两次,并不是按顺序

正常逗号表达式从左往右执行
但是这不是逗号表达式,是print函数的多个参数,多个参数从最右边的开始执行
类似这种题不用太较真,1000分里遇不到1分

#include<stdio.h>
void main()
{
    int a[4]={8,61,32,53},*p;
    p=&a[2];
    int i = 2;
    printf("%d,%d,%d,%d\n",--i,i--,a[--i],a[i--]); 
    printf("%d,%d\n",*--p,*p--); 
 } 

img


执行顺序的问题