[C语言中结构体究竟有什么好处?.ppt

[C语言中结构体究竟有什么好处?.ppt

  1. 1、本文档共16页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
[C语言中结构体究竟有什么好处?

Structures 使用结构体究竟有什么好处? 从基本数据类型、复合数据类型到抽象数据类型 计算机本身是没有数据类型的概念的 内存里存储的内容,你认为它代表什么,它就代表什么 高级语言设计了基本数据类型:整型、浮点型、字符型等。不同的语言也会定义不同的基本类型 基本数据类型并不能方便地解决所有问题 复合数据类型是基本数据类型迭代派生而来 典型的代表就是“结构”,数组、指针也可算作此类 抽象数据类型(ADT)在复合数据类型的基础上增加了对数据的操作 抽象数据类型进而进化为“类” 这是一个跨时代的进步 一个问题 在程序里表示一个人(姓名、年龄、性别、身高、体重……),怎么表示? char name[12]; unsigned int age; char sex; 想表示多个人呢? 定义多个数组?(有些搞笑了) C语言的解决办法 struct person { char name[12]; unsigned int age; char sex; }; struct person是一个类型 struct person students[4]; students[0].name students[0].age students[0].sex 它们都是变量,一般称为结构的成员变量 结构(Structure)的内存占用 一个结构变量的成员变量在内存中是相邻的 整个结构变量的将占用多少内存呢? 是所有成员变量的内存总和吗? 我们可以用sizeof来获得结构的大小 事实上,结构所占的实际空间一般是按照机器字长对齐的 不同的编译器、不同的平台,对齐方式会有变化,不过一般的编译器都可以设定按照多大对齐 sizeof到底是什么? 它是一个C语言的关键字,并不是函数 可以用两种形式使用 sizeof(表达式) 一般都使用sizeof(变量名) sizeof(类型) 求出的结果为表达式值所属类型或者类型占用的字节数 struct类型的特点 一个普通的类型 所以可以定义该类型的变量、数组、指针…… 它的成员可以是任意类型 基本类型、数组、指针、结构…… 可以做函数的参数类型和返回值类型 struct类型的变量 可以互相赋值 所以做为函数的参数时,是传值调用 可以 不可能参与运算 它的成员个个也都是如假包换的变量 面向对象和数据库是struct的思想的发展 结构指针 struct point { int x; int y; }; struct point pt; struct point* ppt; ppt = pt; 怎样通过ppt访问pt的成员? (*ppt).x = 0; ppt-x = 0; /* 更常用 */ 思考题 struct point { int x; int y; }; struct rect { struct point pt1; struct point pt2; }; struct rect rt, *rp=rt; 下面表达式哪些合法? rt.pt1.x (*rp).pt1.x rp-pt1.x rt-pt1.x 上面合法的表达式都是等价的吗? 再思考 下面的结构什么意思? struct something { struct something obj1; struct something obj2; } 下面的的呢? struct something { char name[10]; struct something* pOtherObj; } 位字段 想表达人的姓名、性别、肤色、出生年、月、日,都定义什么类型的成员变量? struct person { char name[12]; char sex; char color; int year; char month; char day; }; 这样有很多的空间浪费,比如month只可能取值1-12 位字段 struct person { char name[12]; unsigned int sex : 2; unsigned int color : 2; int year; unsigned int month : 4; unsigned int day : 5; }; 调整成员顺序可以让结构更紧凑 每个位段都可以当作一个无符号整型数使用 表达范围当然受限,而且当然不能取地址 C语言的核心学习到此结束 32个关键字和围绕它们的语法、符号构成了C语言的核心 26个字母以及围绕它们的构词法、语法构成了英语的核心 对C语言核心的讲述并非面面俱到,而是紧抓核心的核心,在理解了核心的核心基础上讲解各种常用和有代表性的外延。一些比较少见,或者很容易理解的,要么一带而过,要么干脆没有

文档评论(0)

wendan118 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档