- 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运算的功能是计算出给定的运算量占用内存空间的字节数,它的运算表达式一般形式如下:
您可能关注的文档
- 02【基础模块第二讲[对联].ppt
- 02_设计模式_面向对象基础.pptx
- 02体格检查.病历书写.ppt
- 02有机化合物命名.ppt
- 02中国地理[第2章].ppt
- 02实验设备和培养条件.ppt
- 03.1第3章核酸的化学.ppt
- 02量纲(简化)_微分讲义_2010.ppt
- 02细胞基本功能.ppt
- 037_038常用的类.ppt
- Compass说明书用户手册.pdf
- Jiangsu Longda Super Alloy Co., Ltd. 制度 规定 说明书用户手册.pdf
- Sina三六零安全科技股份有限公司会议资料说明书用户手册.pdf
- Canyuan Futures Co., Ltd. 创元期货 公司治理 说明书用户手册.pdf
- Guangzhou Business School发展团员工作细则说明书用户手册.pdf
- SUJIE制度上说明书用户手册.pdf
- SocialOrganizationWorkPlatform说明书用户手册.pdf
- PZGX品类信息型号信息说明书用户手册.pdf
- 2026年党支部书记党课讲稿汇编.docx
- 个人对照 带头强化政治忠诚、提高政治能力方面存在的不足.docx
原创力文档

文档评论(0)