求职宝典 第三章 结构体 共用体 与枚举


 

1.结构体struct

结构体与数组的不同:

1)结构体可以在一个结构中声明不同的类型,数组做不到

2)相同结构的结构体是可以相互赋值的,数组做不到

C++classstruct的区别:

Class的成员访问权限默认为private,而struct的成员访问权限默认为public

结构体的定义

结构体类型变量的定义一般形式为:

Struct 结构体类型名

{

   结构体1 成员名1

   结构体2 成员名2

   ...

   结构体n 成员名n;

};

在结构体定义时要注意以下几点:

1)结构体结构体类型定义中不允许对结构体本身递归定义,但可以使用指针指向本结构体。

2)结构体定义中可以包含另外的结构体,即结构体是可以嵌套的。

3)结构体变量可以在定义时进行初始化赋值。

 

结构体中的位字段  略

 

2. 共用体 union

结构体和公用体(联合)都是由多个不同的数据成员组成,但在任何同一时刻,共用体中只存放了一个被选中的成员,而结构体的所有成员都存在,对公用体的不同成员赋值,将会对其它成员重写,原来成员的值就不存在了,而对于结构体的不同成员赋值是互不影响的。

其参考形式为:

Union 公用体名

{

数据类型 成员名;

数据类型 成员名;

...

数据类型 成员名

}变量名;

共用体占用内存为各大成员中占用最大者的内存。

 

3.枚举

 枚举是一种用户自定义类型,定义的基本格式为:

Enum 枚举类型名

{

   枚举常量1[=整形常数]

   枚举常量2[=整形常数]

   ...

}[变量名列表]

   花括号中的内容称为枚举表,其中的每一项称为枚举常量,换言之,枚举表是枚举常量的集合。枚举表中每项后的“=整形常数”是给枚举变量赋初值,用方括号代表这步可以省略,如果不给枚举常量赋初值,编译器会为每一个枚举常量赋一个不同的整数值,第一个为0。当枚举表中某个常量赋初值后,其后的成员则按依次加一的规则确定其值。

 

4.sizeof运算符

 使用方法

 1)用于变量

  Sizeof的使用形式: sizeof(var_name)sizeof var_name

变量名可以不用括号括住,但是带括号的用法更加普遍。

 2)用于数据类型

  Sizeof的使用形式: sizeof(type)

数据类型必须用括号括住

Sizeof 结果

Sizeof操作符的结果是 size_t ,它被定义为unsigned_int 类型,该类型保证能容纳实现所建立的最大对象的字节大小。

  3)与strlen()比较

Sizeof计算数据(包括数组、变量、类型、结构体等)所占内存空间,用字节数表示,故将内容与’\0’的数组元素计算在内。而strlen计算字符数组的字符数,以’\0’为结束标志,且不讲’\0’计算在字符内。

  4)指针、引用、汉字及数组的sizeof 操作

  指针可以视为变量的一种,在32位机器系统下,所有指针变量的sizeof 操作结果均为4,若在64位机器系统下,所有指针变量的sizeof 操作结果均为8

  所有引用变量的sizeof ,等同于被引用对象的sizeof

  对于C字符串,需要牢记C/C++中一个汉字仅占两个字节,且字符串末尾有一个空字符。

  对于数组,sizeof可直接计算数组大小。

5)struct 的空间计算

   Struct的空间计算较为复杂,总体上遵循两个原则

   第一个原则是:整体空间是占用空间最大的成员(的类型)所占字节数的整数倍,但在32Linux + gcc 环境下,若最大成员类型所占字节数超过4,则整体空间是4的倍数即可。

   第二个原则是:数据对齐原则------内存按结构体成员的先后顺序排列,当排到该成员变量时,其前面已摆放的成员大小必须是该成员类型大小的整数倍,如果不够则补齐,依次向后类推,但在Linux+gcc 环境下,若某成员类型所占的字节数超过4,如double8,则前面已摆放的空间大小是4 的倍数即可。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值