//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