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

《C语言中结构体究竟有什么好处?

Structures 使用结构体究竟有什么好处? 从基本数据类型、复合数据类型到抽象数据类型 计算机本身是没有数据类型的概念的 内存里存储的内容,你认为它代表什么,它就代表什么 高级语言设计了基本数据类型:整型、浮点型、字符型等。不同的语言也会定义不同的基本类型 基本数据类型并不能方便地解决所有问题 复合数据类型是基本数据类型迭代派生而来 典型的代表就是“结构”,数组、指针也可算作此类 抽象数据类型(ADT)在复合数据类型的基础上增加了对数据的操作 抽象数据类型进而进化为“类” 这是一个跨时代的进步 一个问题 在程序里表示一个人(姓名、年龄、性别、身高、体重……),怎么表示? char name[12];unsigned int age;charsex; 想表示多个人呢? 定义多个数组?(有些搞笑了) C语言的解决办法 struct person{char name[12];unsigned int age;char sex;}; struct person是一个类型 struct person students[4]; students[0].namestudents[0].agestudents[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语言核心的讲述并非面面俱到,而是紧抓核心的核心,在理解了核心的核心基础上讲解各种常用和有代表性的外延。一些比较少见,或者很容易理解的,要么一带而过,

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值