MFC C++ 的运算问题 表达式不同结果完全不同

        //by1 = pbuf[DataAddr++];
        //by2 = pbuf[DataAddr++];
        wSlaveNodNum = pbuf[DataAddr++] + (((WORD)pbuf[DataAddr++])<<8);
        和
        by1 = pbuf[DataAddr++];
        by2 = pbuf[DataAddr++];
        wSlaveNodNum =  by1 + (((WORD)by2)<<8);

        pbuf[0x40,0x00],DataAddr=0上面两种运算结果完全不同,求解

1)一般情况下要选用第二种明确的写法,而不要使用第一种写法
2)第一种写法会出现副作用,求值顺序不明确有时候会等价于

 wSlaveNodNum = pbuf[DataAddr] + (((WORD)pbuf[DataAddr])<<8);
++DataAddr;
++DataAddr;

是的,就是您说的这种情况;
pbuf[2]={0x40,0},第一种计算结果就如您的等效算式,结果成了0x4040