C中数组元素重新定义的区别

Difference between redefinition of array elements in C

我是 C 的初学者,在编程过程中我发现了这段关于按位加法的代码

#define WORD_FROM_BUF(WRD) ((((unsigned char *)(WRD))[0]<<8)|((unsigned char *)(WRD))[1])

我试过将这段代码修改成这种形式

 #define WORD_FROM_BUF(WRD) (((unsigned char *)(WRD[0])<<8)|((unsigned char *)(WRD[1]))

编辑 我的问题类似于这两个问题 C macros and use of arguments in parentheses- by Palec

谢谢大家的讲解

(unsigned char *)(WRD) 获取指针 (?) WRD 并将其转换为指向字节的指针。使用 [0] 索引该字节指针从缓冲区中获取第一个字节。将其与下一个字节组合时,您会得到一个双字节值。

(unsigned char *)(WRD[0]) 从缓冲区中取出第一个单词 (?) 并将 that 单词转换为指针。完全不同,而且很可能完全错误,因为移动指针 << 8 毫无意义。

然后WRD[1]从缓冲区中取出第二个字,而不是第二个字节。