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]
从缓冲区中取出第二个字,而不是第二个字节。
我是 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]
从缓冲区中取出第二个字,而不是第二个字节。