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

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

使用结构体究竟有什么好处?2020/2/262从基本数据类型、复合数据类型到抽象数据类型计算机本身是没有数据类型的概念的–内存里存储的内容,你认为它代表什么,它就代表什么高级语言设计了基本数据类型:整型、浮点型、字符型等。不同的语言也会定义不同的基本类型–基本数据类型并不能方便地解决所有问题复合数据类型是基本数据类型迭代派生而来–典型的代表就是“结构”,数组、指针也可算作此类抽象数据类型(ADT)在复合数据类型的基础上增加了对数据的操作抽象数据类型进而进化为“类”–这是一个跨时代的进步2020/2/263一个问题在程序里表示一个人(姓名、年龄、性别、身高、体重……),怎么表示?–charname[12];unsignedintage;charsex;想表示多个人呢?–定义多个数组?(有些搞笑了)2020/2/264C语言的解决办法structperson{charname[12];unsignedintage;charsex;};–structperson是一个类型structpersonstudents[4];students[0].namestudents[0].agestudents[0].sex–它们都是变量,一般称为结构的成员变量2020/2/265结构(Structure)的内存占用一个结构变量的成员变量在内存中是相邻的整个结构变量的将占用多少内存呢?–是所有成员变量的内存总和吗?–我们可以用sizeof来获得结构的大小–事实上,结构所占的实际空间一般是按照机器字长对齐的不同的编译器、不同的平台,对齐方式会有变化,不过一般的编译器都可以设定按照多大对齐2020/2/266sizeof到底是什么?它是一个C语言的关键字,并不是函数可以用两种形式使用–sizeof(表达式)一般都使用sizeof(变量名)–sizeof(类型)求出的结果为表达式值所属类型或者类型占用的字节数2020/2/267struct类型的特点一个普通的类型–所以可以定义该类型的变量、数组、指针……–它的成员可以是任意类型基本类型、数组、指针、结构……–可以做函数的参数类型和返回值类型struct类型的变量–可以互相赋值所以做为函数的参数时,是传值调用–可以&–不可能参与运算它的成员个个也都是如假包换的变量面向对象和数据库是struct的思想的发展2020/2/268结构指针structpoint{intx;inty;};structpointpt;structpoint*ppt;ppt=&pt;怎样通过ppt访问pt的成员?–(*ppt).x=0;–ppt-x=0;/*更常用*/2020/2/269思考题structpoint{intx;inty;};structrect{structpointpt1;structpointpt2;};structrectrt,*rp=&rt;下面表达式哪些合法?–rt.pt1.x–(*rp).pt1.x–rp-pt1.x–rt-pt1.x上面合法的表达式都是等价的吗?2020/2/2610再思考下面的结构什么意思?–structsomething{structsomethingobj1;structsomethingobj2;}下面的的呢?–structsomething{charname[10];structsomething*pOtherObj;}2020/2/2611位字段想表达人的姓名、性别、肤色、出生年、月、日,都定义什么类型的成员变量?structperson{charname[12];charsex;charcolor;intyear;charmonth;charday;};这样有很多的空间浪费,比如month只可能取值1-122020/2/2612位字段structperson{charname[12];unsignedintsex:2;unsignedintcolor:2;intyear;unsignedintmonth:4;unsignedintday:5;};调整成员顺序可以让结构更紧凑每个位段都可以当作一个无符号整型数使用–表达范围当然受限,而且当然不能取地址2020/2/2613C语言的核心学习到此结束32个关键字和围绕它们的语法、符号构成了C语言的核心–26个字母以及围绕它们的构词法、语法构成了英语的核心对C语言核心的讲述并非面面俱到,而是紧抓核心的核心,在理解了核心的核心基础上讲解各种常用和有代表性的外延。一些比较少见,或者很容易理解的,要么一带而过,要么干脆没有涉及仅掌握语言的核心当然不能熟练运用语言–背下英语的所有单词和语法,你就能写出莎士比亚一样的诗句了吗?2020/2/2614C语言中的三大定律表达式定律–任何能产生数值结果的运算、操作都可以作为表达式,并可以放到任何需要数值结果的地方,只要数值类型能够匹配–常见的可以产生数值结果的运算和操作算术、逻辑、位运算等?:、&、*等有返回值的函数赋值–常见的需要数值的地方有:赋值条件判断函数调用2020/2/2615C语言中的三大定律类型定律–任何类型都可以在任何需要类型的地方使用;用任何类型定义的变量都要占用内存–已知特例函数返回值不能定义为数组类型函数参数定义为数组类型,此时该参数不占用内存,而是共享函数调用者传入的数组空间–常用类型基本数据类型、指针、数组、结构……–常见的需要类型的地方定义变量定义指针、数组和结构函数参数和返回值sizeof2020/2/2616C语言中的三大定律参数传递定律–函数调用时的参数传递永远都是传值调用,把实参的值拷贝给形参实参:调用者提供的参数形参:函数定义的参数基本数据类型无容置疑struct也无容置疑指针作为参数时,把指针变量的内容(就是其指向的内存地址)做了拷贝数组名作为参数时,把它等同于指针看待了

1 / 16
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功