自定义类型超详细解答!!!!!(下)

简介: 自定义类型超详细解答!!!!!

第四条规则

所以这个字节长度为32

位段的跨平台问题

1. int 位段被当成有符号数还是无符号数是不确定的。

2. 位段中最大位的数目不能确定。(16位机器最大16,32位机器最大32,写成27,在16位机 器会出问题。

3. 位段中的成员在内存中从左向右分配,还是从右向左分配标准尚未定义。

4. 当一个结构包含两个位段,第二个位段成员比较大,无法容纳于第一个位段剩余的位时,是 舍弃剩余的位还是利用,这是不确定的。

 


枚举

枚举顾名思义就是一一列举。

把可能的取值一一列举。

比如我们现实生活中

一周的星期一到星期日是有限的7天,可以一一列举。


 枚举类型的定义

   enum Day//星期 day是变量名 ,mon,tues这种是成员变量
   {
       Mon,
       Tues,
       Wed,
       Thur,
       Fri,
       Sat,
       Sun
   };
   enum Sex//性别
   {
       MALE,
       FEMALE,
       SECRET
   };
       enum Color//颜色
   {
       RED,
       GREEN,
       BLUE
   };

 

以上定义的 enum Day , enum Sex , enum Color 都是枚举类型。 {}中的内容是枚举类型的可能取值,也叫 枚举常量

这些可能取值都是有值的,默认从0开始,一次递增1,当然在定义的时候也可以赋初值。 例如:

所以打印的时候都是数字。

我们思考一下 枚举类型的大小是多少?

为什么是4,因为枚举类型是整形常量的集合,也就是值的集合,并且这些值是可能取值的状态,所以只有四个字节。


枚举的使用

我们以通讯录为例子

这样写我们增加了代码的可读性,我们就不用去对应数字查找了。


联合(共用)体

联合类型的定义

联合也是一种特殊的自定义类型 这种类型定义的变量也包含一系列的成员,特征是这些成员公用同一块空间(所以联合也叫共用体)。 比如:

//联合类型的声明

union Un

{

char c;

int i;

};

//联合变量的定义

union Un un;

//计算连个变量的大小

printf("%d\n", sizeof(un));

思考一下这个字节大小是多少 ?

答案是4,因为联合体类型的成员共用一块空间,最少要容纳最大成员的字节大小,上述最大是int类型,所以是4.


联合的特点

联合的成员是共用同一块内存空间的,这样一个联合变量的大小,至少是最大成员的大小(因为联 合至少得有能力保存最大的那个成员)——上个问题中讲过。

那么看看还有什么特点,

先看一个例子

   union Un

   {

       int i;

       char c;

   };

   union Un un;

   // 下面输出的结果是一样的吗?

   printf("%p\n", &(un.i));

   printf("%p\n", &(un.c));

   //下面输出的结果是什么?

   un.i = 0x11223344;

   un.c = 0x55;

   printf("%x\n", un.i);

两个成员的地址是一样的,那为什么是一样的呢?

因为他们是占用同一个空间,首地址相同。

判断当前计算机的大小端存储

用联合体更好

 


联合大小的计算

  • 联合的大小至少是最大成员的大小。
  • 当最大成员大小不是最大对齐数的整数倍的时候,就要对齐到最大对齐数的整数倍。

union Un1

   {

       char c[5];

       int i;

   };

   union Un2

   {

       short c[7];

       int i;

   };

   //下面输出的结果是什么?

   printf("%d\n", sizeof(union Un1));

   printf("%d\n", sizeof(union Un2));

 

根据的是第二条规则

 

相关文章
|
7月前
|
存储 Linux C++
自定义类型讲解
自定义类型讲解
83 0
|
6月前
|
存储 编译器 Linux
自定义类型详解(1)
自定义类型详解(1)
51 5
|
6月前
自定义类型详解(2)
自定义类型详解(2)
47 1
|
7月前
|
编译器 Linux C++
自定义类型详解
自定义类型详解
|
7月前
|
编译器 C++
自定义类型
自定义类型
|
存储 算法 程序员
自定义类型总结
自定义类型总结
80 0
|
编译器 C++
自定义类型超详细解答!!!!!(上)
自定义类型超详细解答!!!!!
|
C语言 C++
自定义类型枚举(下)
自定义类型枚举
40 0
自定义类型枚举(上)
自定义类型枚举
35 0
|
编译器 Linux C语言
自定义类型详解(上)
自定义类型详解(上)
自定义类型详解(上)