C++--struct的用法
1.struct的自然对界
struct是一种复合数据类型,其构成元素既可以是基本数据类型(如int、long、float等)的变量,也可以是一些复合数据类型(如array、struct、union等)的数据单元。对于结构体,编译器会自动进行成员变量的对齐,以提高运算效率。缺省情况下,编译器为结构体的每个成员按其自然对界(natural alignment)条件分配空间。各个成员按照它们被声明的顺序在内存中顺序存储,第一个成员的地址和整个结构的地址相同。
自然对界(natural alignment)即默认对齐方式,是指按结构体的成员中size最大的成员对齐。
例如:
struct naturalalign
{
char a;
short b;
char c;
};
在上述结构体中,size最大的是short,其长度为2字节,因而结构体中的char成员a、c都以2为单位对齐,sizeof(naturalalign)的结果等于6;
如果改为:struct naturalalign
{
char a;
int b;
char c;
};
其结果显然为12。
2.位操作
位结构是一种特殊的结构, 在需按位访问一个字节或字的多个位时, 位结构
比按位运算符更加方便。
位结构定义的一般形式为:
struct位结构名{
数据类型 变量名: 整型常数;
数据类型 变量名: 整型常数;
} 位结构变量;
其中: 数据类型必须是int(unsigned或signed)。 整型常数必须是非负的整
数, 范围是0~15, 表示二进制位的个数, 即表示有多少位。
变量名是选择项, 可以不命名, 这样规定是为了排列需要。
例如: 下面定义了一个位结构。
struct{
unsigned incon: 8;
/*incon占用低字节的0~7共8位*/
unsigned txcolor:
4;/*txcolor占用高字节的0~3位共4位*/
unsigned bgcolor:
3;/*bgcolor占用高字节的4~6位共3位*/
unsigned blink: 1; /*blink占用高字节的第7位*/
}ch;
位结构成员的访问与结构成员的访问相同。
例如: 访问上例位结构中的bgcolor成员可写成:
ch.bgcolor
注意:
1. 位结构中的成员可以定义为unsigned, 也可定义为signed, 但当成员长
度为1时, 会被认为是unsigned类型。因为单个位不可能具有符号。
2. 位结构中的成员不能使用数组和指针, 但位结构变量可以是数组和指针,
如果是指针, 其成员访问方式同结构指针。
3. 位结构总长度(位数), 是各个位成员定义的位数之和, 可以超过两个字
节。
4. 位结构成员可以与其它结构成员一起使用。
例如:
struct info{
char name[8];
int age;
struct addr address;
float pay;
unsigned state: 1;
unsigned pay: 1;
}workers;’
上例的结构定义了关于一个工从的信息。其中有两个位结构成员, 每个位结
构成员只有一位, 因此只占一个字节但保存了两个信息, 该字节中第一位表示工
人的状态, 第二位表示工资是否已发放。由此可见使用位结构可以节省存贮空间。
3.指定边界
一般地,可以通过下面的方法来改变缺省的对界条件:
· 使用伪指令#pragma pack (n),编译器将按照n个字节对齐;
· 使用伪指令#pragma pack (),取消自定义字节对齐方式。
注意:如果#pragma pack (n)中指定的n大于结构体中最大成员的size,则其不起作用,结构体仍然按照size最大的成员进行对界。
例如:
#pragma pack (n)
struct naturalalign
{
char a;
int b;
char c;
};
#pragma pack ()
原文链接:http://blog.21ic.com/user1/2765/archives/2009/55977.html
C++--struct的用法相关推荐
- C语言struct 函数,c语言struct的用法
C语言中先申明结构体,也就是定义结构体具体形式,而后可以把它当做普通数据类型来修饰变量,也可以在定义类型时后面直接跟着定义几个变量,下面小编就为你介绍c语言struct的用法. 基本定义:结构体,通俗 ...
- struct sysinfo 用法
在Linux中,sysinfo是用来获取系统相关信息的结构体,其原型如下: struct sysinfo { long uptime; /* Seconds ...
- struct timeval用法与时间溢出问题
1.用法 高精度计算时间的结构体struct timeval. 头文件是sys/time.h 网上查找的定义是 #include "sys/time.h"struct timeva ...
- matlab中struct2,Matlab中struct的用法
struct在matlab中是用来建立结构体数组的.通常有两种用法: s = struct('field1',{},'field2',{},...) 这是建立一个空的结构体,field1,field2 ...
- linux sysinfo结构体,struct sysinfo 用法
在Linux中,sysinfo是用来获取系统相关信息的结构体,其原型如下: struct sysinfo { long uptime; /* Seconds sin ...
- struct linger 用法
http://www.cnblogs.com/caosiyang/archive/2012/03/29/2422956.html Linux下tcp连接断开的时候调用close()函数,有优雅断开和强 ...
- Linux struct itimerval用法
先看一段代码 #include <stdio.h> #include <time.h> #include <sys/time.h> #include <std ...
- C++中struct的用法
废话 struct是个很有用的东西呢! 进入正题 struct的用处是定义一个新的类型,而这个类型里面可以是各种各样的东西. 比如: struct node{//定义一个新的类型叫nodeint a; ...
- C语言中结构体struct的用法总结
不积硅步,无以至千里.不积小流,无以成江海.每天进步一点点. 一.概述 结构体属于C语言提供给用户的可以进行自定义的数据类型,来满足一些个性化需求.它允许用户建立由不同类型数据组成的组合型的数据结构. ...
最新文章
- 英特尔10纳米处理器再度跳票,或收缩芯片代工业务
- POJ 2594 Treasure Exploration (可相交最小路径覆盖)
- Python 循环列表删除元素的注意事项
- kafka使用_kafka使用Interceptors实现消息端到端跟踪
- url 保持不变php,thinkphp3.2.3如何只改变地址url中的某一个分隔符,其它保持不变...
- C语言重难点总结:printf和scanf
- 浅谈:Hadoop、spark、SaaS、PaaS、IaaS、云计算
- Spring写第一个程序HelloSpring
- ASP.NET Core开发Docker部署
- 用php做颜色表格,如何使用纯PHP格式化excel文件的样式,字体,颜色,表格等?
- 和is哪个好_眼霜哪个牌子好用?这些品牌的眼霜睡前涂一涂,黑眼圈细纹没有了...
- 让Fiddler调试localhost和127.0.0.1
- STM32之UART、RS232、RS485通讯
- HDUOJ 4565 So Easy!
- 通达信大资金进出指标公式
- 定时打开指定程序软件
- elasticsearch从入门到入门系列(二)---快速入门B
- Jenkins系列:5、wsl下的Jenkins编译Windows下的Qt程序并自动打包成exe
- 财税SaaS行业格局再变,慧算账为何能受资本“偏爱”?
- 什么是KYC,KYC认证的重要性
热门文章
- 欢迎各位到我的qq空间http://user.qzone.qq.com/504501772/infocenter 指点
- truelicense实现用于JAVA工程license
- 得力打印机(DL888D型号)Linux对接——Java+C版
- NMOS的栅极充电过程
- 计算机软考论文网络真题,2017上半年软考中级信息系统项目管理师真题论文
- Windows游戏开发感想一个完整的Windows窗口程序
- 嵌入式linux培训教程,嵌入式Linux开发学习之Linux文件系统学习
- DFRobot-Fermion环境传感器详细介绍和应用
- 谷歌股价跌的越多,我们买的越多
- 音乐app、音乐原型、在线音乐、云音乐、听歌、电台、本地音乐、点赞、收藏、歌单广场、动态、社区、评论、歌词、歌手、主播、视频、云村、下载、翻唱、歌曲播放、订阅、频道、引导页、登录注册、axure原型