宏定义的使用——C语言

目录

1.写一个宏,可以将一个整数的二进制位的奇数位和偶数位交换。

 2.写一个宏,计算结构体中某变量相对于首地址的偏移,并给出说明

2.1offsetof函数

2.1offsetof 计算变量相当于首地址原理

 2.3offsetof模拟实现


1.写一个宏,可以将一个整数的二进制位的奇数位和偶数位交换。

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
//写一个宏,可以将一个整数的二进制位的奇数位和偶数位交换。
#define SWAP(n) (((n&0xaaaaaaaa)>>1)+((n&0x55555555)<<1))
int main()
{
	int a = 10;
	a=SWAP(a);
	printf("%d",a);
	return 0;
}

 运行结果如下

 2.写一个宏,计算结构体中某变量相对于首地址的偏移,并给出说明

2.1offsetof函数

C标准库 #include<stddef.h>

 offsetof(type, member_designator)会生成一个类型为size_t的整型常量,它是一个结构体成员相对结构开头的字节偏移量。

成员由member_designator给定,结构名称由type给定。

 声明 offsetof(type,member_designator)

该宏返回类型为 size_t 的值,表示 type 中成员的偏移量。

#define OFFSETOF(type, member_designator)  (size_t)&(((type*)0)->member_designator)

2.1offsetof 计算变量相当于首地址原理

 2.3offsetof模拟实现

#include <stddef.h>

//写一个宏,计算结构体中某变量相对于首地址的偏移,并给出说明


struct Stu
{
	int age;
	char sex;
	double num;
};
#define OFFSETOF(struct_type, name)  (size_t)&(((struct_type*)0)->name)
int main()
{
	printf("%d\n", OFFSETOF(struct Stu, age));
	printf("%d\n", OFFSETOF(struct Stu, sex));
	printf("%d\n", OFFSETOF(struct Stu, num));
	return 0;
}

结果如下

 

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

孙宇航_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值