C++/C#跨语言编程知识点_用栈减小结构体大小和0计算偏移量_class2

cpp 复制代码
#include <iostream>
#define FIELDOFFSET(TYPE, MEMBER) (int)(&(((TYPE*)0)->MEMBER))
//0可以转换为任意类型的结构体或空对象

#pragma pack(push)
#pragma pack(1)
struct Info
{


	char username[10];//24-34 
	double userdata;//40-48
};
#pragma pack(pop)//会变成18
struct Frame
{
	unsigned char id;//0-1
	int width;//4-8
	long long height;//8-16
	unsigned char* data;//16-20
	Info info;//24-48
};
int main()
{
	int len2 = sizeof(Info);//子结构体改变
	int len = sizeof(Frame);//母结构体不改变
	int offset_w = FIELDOFFSET(Frame, width);
	int offset_h = FIELDOFFSET(Frame, height);
	int offset_d = FIELDOFFSET(Frame, data);
	int offset_i = FIELDOFFSET(Frame, info);
	/*len = sizeof(Info);*/
	
	return 0;
}

1.定义0计算偏移量

cpp 复制代码
#define FIELDOFFSET(TYPE, MEMBER) (int)(&(((TYPE*)0)->MEMBER))
int offset_w = FIELDOFFSET(Frame, width);

2.结构体入栈出栈

#pragma pack(push)

#pragma pack(1)

struct Info

{

char username[10];//24-34

double userdata;//40-48

..........

};

#pragma pack(pop)//会变成18

相关推荐
We་ct几秒前
LeetCode 242. 有效的字母异位词:解法解析与时空优化全攻略
前端·算法·leetcode·typescript
执着259几秒前
力扣hot100 - 104、二叉树的最大深度
算法·leetcode·职场和发展
_OP_CHEN2 分钟前
【算法基础篇】(五十四)解析错排问题:从信封错位到编程实战,一次性搞懂排列组合中的 “反常识” 难题!
算法·蓝桥杯·c/c++·组合计数·算法竞赛·acm/icpc·错排问题
浅碎时光8072 分钟前
Qt (信号与槽 Widget控件 qrc文件)
开发语言·qt
我要打打代码3 分钟前
C# 各种类库
开发语言·c#
王老师青少年编程5 分钟前
2022信奥赛C++提高组csp-s复赛真题及题解:策略游戏
c++·真题·csp·信奥赛·csp-s·提高组·策略游戏
小辰辰就要混5 分钟前
20、Lambda表达式和Stream
开发语言·python
Vivienne_ChenW6 分钟前
Apollo 配置中心核心用法(实战版)
java·开发语言·分布式·阿里云·产品运营
小乔的编程内容分享站9 分钟前
C语言函数的声明和定义(文章包括当VScode中含多个.c文件且含.h文件如何同时编译
c语言·开发语言·vscode
苦藤新鸡9 分钟前
54 子集
算法·leetcode·动态规划