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的用法相关推荐

  1. C语言struct 函数,c语言struct的用法

    C语言中先申明结构体,也就是定义结构体具体形式,而后可以把它当做普通数据类型来修饰变量,也可以在定义类型时后面直接跟着定义几个变量,下面小编就为你介绍c语言struct的用法. 基本定义:结构体,通俗 ...

  2. struct sysinfo 用法

    在Linux中,sysinfo是用来获取系统相关信息的结构体,其原型如下: struct sysinfo {     long uptime;                   /* Seconds ...

  3. struct timeval用法与时间溢出问题

    1.用法 高精度计算时间的结构体struct timeval. 头文件是sys/time.h 网上查找的定义是 #include "sys/time.h"struct timeva ...

  4. matlab中struct2,Matlab中struct的用法

    struct在matlab中是用来建立结构体数组的.通常有两种用法: s = struct('field1',{},'field2',{},...) 这是建立一个空的结构体,field1,field2 ...

  5. linux sysinfo结构体,struct sysinfo 用法

    在Linux中,sysinfo是用来获取系统相关信息的结构体,其原型如下: struct sysinfo { long uptime;                   /* Seconds sin ...

  6. struct linger 用法

    http://www.cnblogs.com/caosiyang/archive/2012/03/29/2422956.html Linux下tcp连接断开的时候调用close()函数,有优雅断开和强 ...

  7. Linux struct itimerval用法

    先看一段代码 #include <stdio.h> #include <time.h> #include <sys/time.h> #include <std ...

  8. C++中struct的用法

    废话 struct是个很有用的东西呢! 进入正题 struct的用处是定义一个新的类型,而这个类型里面可以是各种各样的东西. 比如: struct node{//定义一个新的类型叫nodeint a; ...

  9. C语言中结构体struct的用法总结

    不积硅步,无以至千里.不积小流,无以成江海.每天进步一点点. 一.概述 结构体属于C语言提供给用户的可以进行自定义的数据类型,来满足一些个性化需求.它允许用户建立由不同类型数据组成的组合型的数据结构. ...

最新文章

  1. 英特尔10纳米处理器再度跳票,或收缩芯片代工业务
  2. POJ 2594 Treasure Exploration (可相交最小路径覆盖)
  3. Python 循环列表删除元素的注意事项
  4. kafka使用_kafka使用Interceptors实现消息端到端跟踪
  5. url 保持不变php,thinkphp3.2.3如何只改变地址url中的某一个分隔符,其它保持不变...
  6. C语言重难点总结:printf和scanf
  7. 浅谈:Hadoop、spark、SaaS、PaaS、IaaS、云计算
  8. Spring写第一个程序HelloSpring
  9. ASP.NET Core开发Docker部署
  10. 用php做颜色表格,如何使用纯PHP格式化excel文件的样式,字体,颜色,表格等?
  11. 和is哪个好_眼霜哪个牌子好用?这些品牌的眼霜睡前涂一涂,黑眼圈细纹没有了...
  12. 让Fiddler调试localhost和127.0.0.1
  13. STM32之UART、RS232、RS485通讯
  14. HDUOJ 4565 So Easy!
  15. 通达信大资金进出指标公式
  16. 定时打开指定程序软件
  17. elasticsearch从入门到入门系列(二)---快速入门B
  18. Jenkins系列:5、wsl下的Jenkins编译Windows下的Qt程序并自动打包成exe
  19. 财税SaaS行业格局再变,慧算账为何能受资本“偏爱”?
  20. 什么是KYC,KYC认证的重要性

热门文章

  1. 欢迎各位到我的qq空间http://user.qzone.qq.com/504501772/infocenter 指点
  2. truelicense实现用于JAVA工程license
  3. 得力打印机(DL888D型号)Linux对接——Java+C版
  4. NMOS的栅极充电过程
  5. 计算机软考论文网络真题,2017上半年软考中级信息系统项目管理师真题论文
  6. Windows游戏开发感想一个完整的Windows窗口程序
  7. 嵌入式linux培训教程,嵌入式Linux开发学习之Linux文件系统学习
  8. DFRobot-Fermion环境传感器详细介绍和应用
  9. 谷歌股价跌的越多,我们买的越多
  10. 音乐app、音乐原型、在线音乐、云音乐、听歌、电台、本地音乐、点赞、收藏、歌单广场、动态、社区、评论、歌词、歌手、主播、视频、云村、下载、翻唱、歌曲播放、订阅、频道、引导页、登录注册、axure原型