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

相关推荐
rabbitlzx8 分钟前
《Async in C# 5.0》第十四章 深入探讨编译器对于async的转换
java·开发语言·c#·异步·asynchronous
清钟沁桐12 分钟前
算法实现
算法
梦游钓鱼14 分钟前
c++中一维数组和二维数组的应用
数据结构·c++·算法
神明不懂浪漫14 分钟前
【第十三章】操作符详解,预处理指令详解
c语言·开发语言·经验分享·笔记
铁甲前沿14 分钟前
基于最小二乘拟合减小四轮定位数据采集误差的方法
算法
MediaTea15 分钟前
Python:类型槽位
开发语言·python
郝学胜-神的一滴22 分钟前
深入解析Effective Modern C++条款35:基于任务与基于线程编程的哲学与实践
开发语言·数据结构·c++·程序人生
小飞学编程...24 分钟前
【Java相关八股文(二)】
android·java·开发语言
汉克老师27 分钟前
GESP2024年9月认证C++二级( 第一部分选择题(9-15))
c++·循环结构·分支结构·gesp二级·gesp2级·求余数
程序员酥皮蛋27 分钟前
hot 100 第二十六题 26.环形链表 II
算法