#define MALLOC(num ,type) (type*)malloc(num*sizeof(type)) // // int*p = (int*)malloc(10 * sizeof(int)); // int*p2 = MALLOC(10, int); // p == p2
宏的题例1:
写一个宏,可以将一个整数的二进制位的奇数位和偶数位交换。
#include#define SWAP(num) (num = ((num & 0x55555555)<<1) + ((num & 0xaaaaaaaa)>>1)) //0x55555555 01010101 01010101 01010101 01010101 分别取得 奇数位和偶数位的 1 //0xaaaaaaaa 10101010 10101010 10101010 10101010 int main() { int num = 10; //00000000 00000000 00000000 00001010 交换前 //00000000 00000000 00000000 00000101 交换后 SWAP(num); printf("%#xn", num); //输出0x5 00000101 return 0; }
宏的题例2:
写一个宏,计算结构体中某变量相对于首地址的偏移。
#includestruct S { int a; char c; double d; }; #define OFFSETOF(st_type, mem_name) (size_t)&(((st_type*)0)->mem_name) //假设首地址就是从0开始的,那可以把0强转为st_type*, 指向成员men_name, //然后把指向的地址进行& 取地址操作,最后强转为size_t类型,就可以打印出相对应的偏移地址位置 int main() { printf("%dn", OFFSETOF(struct S, a)); //0 printf("%dn", OFFSETOF(struct S, c)); //4 printf("%dn", OFFSETOF(struct S, d)); //8 return 0; }



