标准C程序设计(五)
来源:互联网 发布:视频点播数据分析报告 编辑:程序博客网 时间:2024/04/27 20:18
10 结构体与共用体
10.1 结构体的定义
数组可以用来表示一组相同类型的数据项。但是,如果要用一个名称来表示不同类型的数据集合,就不能用数组了。C语言支持一种结构化的数据类型,称为结构体。它是一种封装不同类型的数据的机制。结构体的概念类似于其他很多语言中“记录”。
与数组不同,必须首先定义结构体的格式,然后在声明结构体的变量。结构体定义和结构体变量创建过程。如下:
struct book_bank{ char title[20]; char author[15]; int pages; float price;};
关键字struct声明一个结构体,该结构体有4个数据字段(即title、author、pages和price)。这些字段称为结构体元素或成员,每个成员可以属于不同的数据类型。book_bank是结构体名,称为结构体标记符。随后就可用标记符名来生命属于该结构体的变量。
注意,上面的定义中没有声明任何变量,只是描述了一种称为模板的格式。
定义一个结构体时应注意以下语法:
- 结构体模板以分号结束
- 整个定义被看做是一条语句,而每个成员则以自己的名称和类型分别声明在模板中的单个语句
- 诸如book_bank的标记符名可在后面的程序中用于声明结构体变量
- 数组是相同类型的数据元素的集合。而结构体可以有不同类型的元素
- 数组其实是一个派生的数据类型,而结构体是一种程序员自定义的数据类型
- 数组就像是C语言内置的一种数据类型。我们所要做的就是声明一个数组变量,然后就可以直接使用了。但结构体不同,我们首先的设计并声明一个数据结构,然后才能声明和使用这种类型的变量。
结构体变量的声明包括以下部分:关键字struct,结构体标记符,由逗号分隔开的变量名列表,终止分号。如:
struct book_bank book1, book2;
其中,结构体的成员本身不是变量,他们不占用任何存储空间,除非它们与诸如book1之类的结构体变量相关联。当编译器遇到声明语句时,将为结构体变量保留存储空间。也可以将结构体定义与变量声明组合在一条语句之中。
struct book_bank{ char title[20]; char author[15]; int pages; float price;} book1, book2;
这里的标记符名(book_bank)可要可不要。但是,并不推荐使用这种方法,原因:
- 由于没有标记符名,就不能再用它来声明其他变量了;
- 通常,结构体定义是出现在程序文件的开头,位于所有变量或函数定义之前。也可以出现在main和诸如#define之类的宏定义之前。在这些情况下,结构体定义是全局,可以被其他函数使用。
typedef用法详解:http://www.kuqin.com/language/20090406/44443.html
typedef struct{ char title[20]; char author[15]; int pages; float price;} mybook;
mybook表示给一个已经存在的数据类型一个新名字,用来简化变量声明。如可以声明变量mybook book1, book2;
10.3 结构体的初始化
C语言不允许对模板中的单个结构体成员进行初始化,必须在实际结构体变量的声明中初始化。test_38.c
10.4 共用体
共用体是从结构体中借来的概念,因此遵循与结构体相似的语法。共用体与结构体两者之间主要的区别是存储形式。
在结构体中,每个成员有自己的存储空间,而共用体中的所有成员使用相同的存储空间。这意味着,尽管共用体可以含有不同的数据类型的多次成员,但一次只能处理一个成员。共用体声明如下:
union item{ int m; float x; char c;} code;
访问一个共用体成员,可以使用访问结构体成员相同的语法。即code.m。访问时,必须确保当前存储是我们要访问的成员的值。如以下语句将产生输出错误:
code.m = 379;code.x = 324.43;printf("%d\n", code.m );
共用体只创建一个存储空间,每次只能被某一成员使用。当某一成员被赋予一个新值时,该新值将替代掉前一成员的值。
当声明变量时,可以对共用体进行初始化。但是,与结构体不同的是,只能用与第一个共用体成员的类型相同的值进行初始化。如unio item code = {100};是合法的,但是,union item code = {10.23};是非法的
10.5 结构体与共用体存储
0 0
- 标准C程序设计(五)
- 标准C程序设计(一)
- 标准C程序设计(二)
- 标准C程序设计(三)
- 标准C程序设计(四)
- 标准C程序设计(六)
- 标准C程序设计(七)
- 标准C程序设计(八)
- 标准C程序设计(九)
- 标准C程序设计(十)
- 标准C程序设计-链表
- CCF青少年计算机程序设计评级标准(五)
- 标准C基础知识五
- 标准C程序设计-链表2
- 标准C程序设计-命令行参数
- 标准C程序设计-链表3
- 标准C程序设计-格式化输出
- 标准C程序设计-格式化输入
- 显卡参数简单介绍
- HTML鼠标形状
- 升级不正确导致ORA-27468错误 及闪回区满(ORA-16014)
- Android Training - 使用IntentService执行任务(Lesson 1 - 创建IntentService)
- 如何在网页中屏蔽左右键?
- 标准C程序设计(五)
- 网页编程.笔记6:跑马灯
- 百度权重是什么?百度算法怎么算?
- Android Training - 使用IntentService执行任务(Lesson 2 - 发送任务给IntentService)
- google-breakpad介绍
- mysql 错误
- Eoe客户端源码分析---SlidingMenu的使用
- 初识JavaFX(二)
- 标准C程序设计(六)