c语言define以及取地址的问题

2025-02-28 08:05:17
推荐回答(2个)
回答1:

#define是字符串替换,#define FIX_LONG(x) (*(unsigned *)&(x)= SWAP_4(*(unsigned *)&(x)))就是在代码中写FIX_LONG(x)就等于写了(*(unsigned *)&(x)= SWAP_4(*(unsigned *)&(x)))。这个表达式的意思是将值x的地址强制为unsigned int*型指针再取其内容作为函数SWAP_4的实参,经函数SWAP_4操作后将其返回值赋给经地址强制转换后的变量x。第二个问题就是经#defineFIX_FLOAT(x) FIX_LONG(x)后,代码中写中写FIX_FLOAT(x)和写FIX_LONG(x)效果是一样的,也就是写FIX_FLOAT(x)的意思也是(*(unsigned *)&(x)= SWAP_4(*(unsigned *)&(x)))了。供参考……

回答2:

1,FIX_LONG(x) 把4字节的数交换字节顺序,可能有的系统有不同的要求。
例如: x=0x10203040 (16进制,很容易看出来)
FIX_LONG(x); 运行后,x==0x40302010;

2,就是你说的