老码识途 数组和结构体

来源:互联网 发布:盗墓java 编辑:程序博客网 时间:2024/06/12 21:42

数组下标从0开始的优势:少计算一次减法,数=首地址+偏移元素大小;否则数=首地址+(偏移-1)元素大小
结构体对齐规律:
首先选定一个盒子,然后一次将字段往盒子里放,当盒子放不下后,又用下一个盒子放,直至所有字段存放完毕;
其中,盒子大小=min(max(sizeof(成员变量)),对齐长度)
其中的对齐长度在编译器的代码生成中设定,在C\c++–>代码生成–>结构成员对齐中,也可以使用代码:#pragma pack (value)来告诉编译器,使用我们指定的对齐值来取代缺省的。
#pragma pack (1) /*指定按2字节对齐*/ #pragma pack () /*取消指定对齐,恢复缺省对齐*/;
字段放入盒子的位置如下:离盒子头部偏移字节数=n*sizeof(成员变量)(n=0,1,2….);
结构体会产生填充,因此要安排变量的位置,尽量做到无填充对齐,

#include <iostream>using namespace std;struct pdf{//  char c;//以这种方式,将报文char[]转换成报文结构体时会因为填充而错误//  int len;    int len;    char c;};int main(){    char buf[64];    buf[1]=12;    *(int *)&buf[0]=12;//  buf[5]=0;//  buf[6]=0;//  buf[7]=0;    pdf *pd;    pd=(pdf *)buf;    cout<<pd->c<<endl;    cout<<pd->len<<endl;    cout<<(int)buf[1]<<endl;    //cout<<sizeof(P);}

又例如:
struct hdr{char c;short n;char c2;};应该调整为struct hdr{char c;char c2;short n;};

0 0
原创粉丝点击