老码识途 数组和结构体
来源:互联网 发布:盗墓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
- 老码识途 数组和结构体
- 结构体和数组
- 结构体和数组
- 结构体和数组
- 结构体数组和结构体指针
- 结构体指针和结构体数组
- 结构体指针和数组
- 元胞数组和结构体数组
- 结构体数组的定义和引用
- struct 结构体中 数组和指针
- byte数组和结构体相互转换
- 结构体数组的定义和引用
- struct 结构体中 数组和指针
- 结构体(有数组和指针)
- UE4结构体数组 定义和访问
- 数组--结构体数组
- Linux学习-结构体数组和结构体指针
- 指针,数组和结构
- 《VxWorks学习笔记》——实时系统
- 工作可以暂时缓缓。找女朋友要紧呐!
- cocos2d学习笔记(自定义类)
- 动态库
- OC语言——block
- 老码识途 数组和结构体
- Objective-C Runtime 运行时之一:类与对象
- Windows 8.1及Windows8 JDK环境变量配置
- android listview滑动出现arrayIndexOutOfBoundException
- 浅谈医学大数据(上)
- 界面上始终有一个浮动的小图标“C",请问如何去掉?
- 二分法练习题目
- 白帽子
- MySQL5.6如何查找my.ini文件和创建的数据库文件夹