结构体、位域和共用体
被考次数: 6次
被考频率: 中频率
答错率:    57%
知识难度:
考试要求: 掌握     
知识路径:  > 嵌入式系统软件基础知识  > 嵌入式系统程序设计  > 嵌入式程序设计语言  > 嵌入式C/C++程序设计要求  > C程序设计基础  > C程序基础


本知识点历年真题试卷分布
>> 试题列表    
 

 
       结构体、位域和共用体类型在程序中需要用户进行定义,同时用typedef定义数据类型的别名。
       结构体
       利用结构体类型可以把一个数据元素的各个不同的数据项聚合为一个整体。结构体类型的声明格式为:
       
       例如,一个复数z=x+yi包含了实部x和虚部y两部分(x和y为实数),可以定义一个表示复数的结构体类型,并用typedef为结构体类型命名为Complex:
       
       在该定义中,Complex是这个结构体类型的名字,re和im是结构的成员。一般情况下,对结构体变量的运算必须通过对其成员进行运算来完成,成员运算符“.”用来访问结构体变量的成员,方式为:
       
       例如,定义结构体变量z,将-4和5分别赋值给一个复数z的实部成员变量和虚部成员变量:
       
       z.re和z.im相当于普通的double型变量。结构体外的变量名和结构体中的成员名相同时不会发生冲突。一个结构体变量的存储空间长度不少于其所有成员所占空间长度之和。
       结构体数据的空间中可能产生填充信息,因为对大多数处理器而言,访问按字或者半字对齐的数据速度更快,当定义结构体时,编译器为了性能优化,可能会将它们按照半字或字对齐。
       例如,下面两个结构体变量structA和structB的成员相同但排列顺序不同,用sizeof计算其所占用存储空间的字节数,sizeof(structA)的值为8,sizeof(structB)的值为12。其存储空间中的填充处理如下图所示。
       
       结构体变量的存储空间
       位域
       有些信息在存储时只需要一个或几个二进制位,而不是完整的字节空间,这时可通过位域的方式来处理,即将一个字节中的二进位划分为几个不同的区域,并说明每个区域的位数。
       位域的定义格式如下:
       
       其中,位域列表的形式为:类型说明符位域名:位域长度。
       例如,定义了下面的位域结构变量bit后,可以为其位域赋值:
       
       共用体
       共用体类型的声明格式为:
       
       例如,定义共用体类型DATA及其变量a。
       
       不能直接引用联合类型的变量,只能引用其成员。用“.”运算符引用共用体变量的成员,引用方式为:
       
       例如,a.i,a.ch,a.f
       一个共用体变量的存储空间的大小等于其占用空间最大的成员的大小,所有成员变量占用同一段内存空间,如下图所示。
       
       共用体变量a的存储空间
 

更多复习资料
请登录电脑版软考在线 www.rkpass.cn

京B2-20210865 | 京ICP备2020040059号-5
京公网安备 11010502032051号 | 营业执照
 Copyright ©2000-2025 All Rights Reserved
软考在线版权所有