您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 其它行业文档 > 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也无容置疑指针作为参数时,把指针变量的内容(就是其指向的内存地址)做了拷贝数组名作为参数时,把它等同于指针看待了
本文标题:C语言中结构体究竟有什么好处?
链接地址:https://www.777doc.com/doc-4007556 .html