0304C语言篇[扩展]01V1.pptVIP

  • 4
  • 0
  • 约5.91千字
  • 约 48页
  • 2017-04-27 发布于四川
  • 举报
0304C语言篇[扩展]01V1

单片机原理与应用;学习内容和目标 结构体; 联合体; 枚举类型等 继续上次讨论的测控系统 注意: 思维一定要开阔一些,多问为什么。 允许不用举手,并随时打断,向我提任何和课程相关的问题。 ;考虑以下问题: 结构体和联合体同基本数据类型有什么不同? 结构体变量和联合体变量有什么本质区别? 枚举类型的变量在应用上与其他数据类型的变量有何不同? 我们能用他们做什么? ;2.1 定义 在标准C语言中,使用结构可以把不同类型的数据存储在一起。作为一种复杂数据类型,在C语言程序中首先要进行结构定义,然后才能进行结构变量的定义和使用。 结构是由不同数据类型的数据组成的。组成结构的每个数据称为该结构的成员项,简称成员。在程序中使用结构时,首先要对结构的组成进行描述,这称为结构的定义。;为了处理雇员的数据,在程序中可以定义如下的结构: struct Employee { char name[20]; char sex; int old; int wage; };;关键字struct作为标识符。结构名由用户命名,命名原则与变量名等相同。 每个成员项由其它数据类型和成员名组成。每个成员项后和整个结构的定义均用分号“;”作为结束符。 结构的定义明确地描述了该结构的组织形式。在程序执行时,结构的定义并不引起系统为该结构分配内存空间。;注意:结构体和结构体变量是不同的内容。 程序一旦定义了一个结构体,就相当于定义了一个新的结构类型,那么就可以把结构名当作像int、double等关键字一样使用,用说明语句定义该形式结构体的具体结构变量,其格式为: 存储类型 struct 结构名 结构变量名; 结构变量的定义在程序的数据说明部分给出。例如,下列说明: struct Employee ssWHPU_PhDWang; ;typedef : 使用typedef语句给已定义的结构类型赋予新的类型名,大大简化了对结构变量的说明 typedef 类型说明 新类型名; typedef则是在编译时进行处理的,它并不是进行简单的字符串替换。定义了一个STRING类型,它是具有81个字符的数组,以后就可用STRING类型定义类型的字符型数组。 ;__attribute__ : GNU C的一大特色 __attribute__可以设置函数属性、变量属性和类型属性。 __attribute__ ((attribute-list)) __attribute__设计的非常巧妙,很容易作到和其它编译器保持兼容,也就是说,如果工作在其它的非GNU编译器上,可以很容易的忽略该属性。即使__attribute__使用了多个参数,也可以很容易的使用一对圆括弧进行处理,例如: 具体内容请参见GUN C的说明;packed:对齐 现代计算机中内存空间都是按照byte划分的,从理论上讲似乎对任何类型的变量的访问可以从任何地址开始,但实际情况是在访问特定变量的时候经常在特定的内存地址访问,这就需要各类型数据按照一定的规则在空间上排列,而不是顺序的一个接一个的排放,这就是对齐。 对齐的作用和原因:各个硬件平台对存储空间的处理上有很大的不同。一些平台对某些特定类型的数据只能从某些特定地址开始存取。其他平台可能没有这种情况, 但是最常见的是如果不按照适合其平台的要求对数据存放进行对齐,会在存取效率上带来损失。比如有些平台每次读都是从偶地址开始,如果一个int型(假设为 32位)如果存放在偶地址开始的地方,那么一个读周期就可以读出,而如果存放在奇地址开始的地方,就可能会需要2个读周期,并对两次读出的结果的高低 字节进行拼凑才能得到该int数据。显然在读取效率上下降很多。这也是空间和时间的博弈。 具体内容请参见C/C++语言的packed说明;结构变量的定义将引起系统按照结构定义时制定的内存模式,为被定义的结构变量分配一定的内存空间。例如,上述结构变量在内存中将占据与原图所示配置相同的内存空间。当多个结构变量使用结构时,它们可以在一起定义。 struct Employee wang, li,zhang; 结构变量使用内存空间,所以它们也具有一定的存储类型。结构变量的存储类型概念、它的寿命、可见性及使用范围与普通变量、数组完全一致。 在程序中,结构变量的定义在该结构的定义之后,对于尚未定义的结构,不能用它对任何结构进行说明。;在一些简单的程序设计中,结构的定义和结构变量的定义也可以同时进行,在这种情况下,有时省略结构名。这时,被定义的结构变量直接在结构定义的大括号}后给出。 一个结构变量占用内存的实际大小,可以利用sizeof运算求出。sizeof运算的功能是计算出给定的运算量占用内存空间的字节数,它的运算表达式一般形式如下:

文档评论(0)

1亿VIP精品文档

相关文档