该从哪里讲起呢?
就先说说我最近做的工作: IP数据报的截取与分析。
在这个工程里面,已经用pData[65000] recv IP数据报, 他用了一句 IPHeader *pIPHdr = (IPHeader*)pData;
其中IPHeader是一个结构体:
typedef struct _IPHeader
{
UCHAR iphVerLen;
UCHAR ipTOS;
USHORT ipLength;
USHORT ipID;
USHORT ipFlags;
UCHAR ipTTL;
UCHAR ipProtocol;
USHORT ipChecksum;
ULONG ipSource;
ULONG ipDestination;
}IPHeader, *PIPHeader;
而pData的格式,查一下IP数据报的格式:
会不会发现, 其实结构体的每一个属性的类型大小与IP数据报的大小“相似”, 其实, 如果 你将结构体的首指针指向IP数据报的首地址(即上文的IPHeader *pIPHdr = (IPHeader*)pData;) 结果如何呢? 当我们在访问结构体的时候, 比如我们访问第一个属性iphVerLen(UCHAR ),编译器将从IP数据报的首地址开始 读取一个字节(UCHAR类型的长度)作为iphVerLen的值, 同理, 当我们访问ipTOS(UCHAR), 编译器编译器将从IP数据报的首地址开始 读取一个字节,再读取下一个字节作为ipTOS的值。。。。。。
delete的作用: 援引网上的一句哈
这里的理解方式应该是这样的: 每一个数据访问的时候需要申请空间 alloc