您好!欢迎来到爱源码

爱源码

热门搜索: 抖音快手短视频下载   

教你C语言的基本语法——结构。 [网站代码]

  • 时间:2022-10-29 03:35 编辑: 来源: 阅读:316
  • 扫一扫,手机访问
摘要:教你C语言的基本语法——结构。 [网站代码]
1.c语言结构的介绍在前面几个方面已经详细介绍过了,比如shaping (int,long,...)、浮点(flaot、double)、字符(char)、数组(存储一组相同类型的数据)和字符串。 但是在实际问题中,只有这些数据类型是不够的。有时候我们需要几个一起修改一个变量。比如一个学生的信息,需要学号(字符串)、姓名(字符串)、年龄(整形)等。这些数据类型不同,但它们代表一个整体。如果有联系,那么我们需要一个新的数据类型。 -结构:不同类型的数据存储在一起,作为一个整体进行求解。 2.c语言使用结构变量来进一步增强表示数据的能力。 2.1结构公告//陈述一个结构struct book { char title[max titl];//用字符串表示的titile标题;char作者[maxa utl];//由字符串表示的作者;浮点值;//价值价格的浮点表示形式;};//注意分号不能少,也相当于一个语句;这个公告描述了一个由两个字符数组和一个浮点变量组成的结构,但是请注意,它不是创建一个实际的数据对象,而是描述了一个组成这样一个对象的元素。[因此,我们有时称结构公告为模板,因为它概述了数据应该如何存储,并且不实例化数据对象] 下面详细介绍上述结构公告;1.首先使用关键字struct,这意味着下一步是一个结构。 2.随后是一本可选的书,是查阅结构的快速标记。 因此,我们可以创建数据对象结构图书库;将来;//将库设置为可以使用图书结构的结构变量,库变量将包含其图书结构中的所有元素。3.接下来是花括号,把结构的成员列表括起来,每个成员变量都有自己的公告描述,描述以分号结束;比如说;char title[max titl];数组就是这样广告的,以分号结尾;注意:每个成员可以使用任何一种C数据结构,甚至其他结构,也是可以的;4.右大括号后的分号表示结构设计定义的结束。 2.2关于它的struct公告的位置,也就是这个代码放在哪里。 这也是有作用域的。 如果这个公告放在任何函数之外,那么可选标记可以在这个文档中,这个公告后面的所有函数都可以使用。 如果这个声明在一个函数内部,那么它的标记只能在内部使用,并且只能在声明之后使用;2.3关于我们一直在说的,标记名是可选的,那么什么时候我们可以省略它,什么时候我们绝对不可以呢?如果是上面的公告定义方法,而你想在一个地方定义结构设计,在其他地方定义实际的结构变量,那么就必须使用标签;可以省略,在设计的同时创建结构变量,但是这个设计是一次性的,还引入了typedef。 下面和后面的结构变量定义一起说一下结构类型定义的总结。一般格式为:struct结构名(即可选标记名){成员变量;};//用分号表示定义的结尾;边肖推荐一个学习氛围很好的地方,C/C++交流企鹅裙:870963251!适合大学生,小白,谁想要改变职业生涯,并加入到这个求职。 裙子里有很多学习资料,有大神解答交流问题,每晚还有免费直播课。3.定义结构变量。3.1之前我们结构类型的定义(结构的公告)只是告诉编译器如何表示数据,并没有让计算机为其分配空间。 如果要使用结构,就需要创建变量,也就是结构变量;创建一个结构变量;结构图书图书馆;看到这条指令,编译器会创建一个结构变量库。这个时候编译器会根据书模板给这个变量分配内存空间,这里的内存空间都是和这个变量结合在一起的。这也是我们以后访问结构变量成员的时候,我们会用结构变量名来访问它。 分析:结构书的功能;在结构公告中,struct book的作用与int、、、等基本数据类型名称相同。 结构书s1,s2,* ss定义了两个struct book结构变量,还定义了一个指向该结构的指针,其ss指针可以指向s1,s2,或者任何其他的book结构变量。 实际上:结构图书库;;相当于:struct book { char………………}库;两者是等价的,但第一种可以减少代码编写量;3.2现在让我们回到刚才提到的问题。什么时候可以省略可选标识符之一:struct { char title[max titl];char作者[maxa utl];浮点值;}图书馆;//注意:不需要定义公告结构的类型,而是直接创建结构变量。这个编译器将分配内存;//这个确实可以省略标识符,也就是结构名,但是只能用一次,因为这是宣告结构的过程,也是定义结构变量的过程,成员变量没有初始化;//如果要重复使用一个结构模块,这个不行;第二,用typedef定义一个新的类型名来替换现有的类型名,即重命名现有的类型;一般格式为:Typedef已经有了类型的新类型名;typedef int Elemtypedef结构{ int date..........}学生;学生stu1,stu2总结一下结构变量的定义:1。在定义结构变量之前定义结构类型;格式为;Struct结构名变量名列表;结构书s1,s2,* ss//注意,结构类型要在变量定义之前定义;2.在定义结构类型的同时定义结构变量;格式为;结构名称{成员列表;}变量名列表;//这里可以保存结构名,但是尽量不要保存;struct book { char title[max titl];//用字符串表示的titile标题;char作者[maxa utl];//由字符串表示的作者;浮点值;//价值价格的浮点表示形式;}s1,S2;3.直接定义结构类型变量是第二个中省略结构名的情况;此方法不能指定structure类型名称,而是直接定义结构变量,当值定义结构变量一次时适用。没有结构名的结构类型是不能重用的,也就是说后面的程序不能再定义这个类型变量,除非重复的struct再写一遍。对于结构变量4.1的初始化,先回忆一下基本数据类型和数组类型int a = 0的初始化;;int array[4] = {1,2,3,4 };//每个元素用逗号分隔。回忆一下数组初始化问题;让我们回到结构变量的初始化。结构变量的初始化类似于初始化数组:它也是用花括号括起来并用逗号分隔的初始化项的列表。请注意,每个初始化的项必须与要初始化的结构成员类型相匹配。structure book S1 = {//初始化结构“虞雯”,//title是字符串“guojiajiaoyun”,//author是字符数组22.5 //value是flaot。//要对应,用逗号隔开,就像数组初始化一样;4.2补充一点关于结构初始化和存储周期的知识。如果要用静态存储周期初始化一个结构,初始化项列表中的值必须是常量表达式。如果存储周期是自动的,则列表中的值不必是恒定的。这一点在讲存储类时期的时候分析过;4.3注意:如果结构变量在定义的时候没有初始化,后面就不能一起初始化了;意思是:///////这是可能的,变量在定义的时候就初始化了;struct book S1 = {//Initialize " guojia jiaoyun ",//author该结构,//author是字符数组" Yuwen ",//title是字符串22.5 };/////////这样不行。定义变量后,如果要给变量的成员赋值,只能单独赋值;结构书S1;S1={"guojiajiaoyun ",//author是字符数组"宇文",//title是字符串22.5 };//这样不行。只能在定义的时候初始化,然后不能全赋值,只能单个赋值;只有;s1.title = "虞雯";.......//单赋值;4.4初始化指定的结构"这只存在于c99," 5。访问结构成员5.1结构就像一个超级数组。在这个超级数组中,一个元素可以是char类型,下一个元素可以是flaot类型,下一个元素可以是int array类型。这些都存在。 在数组中,我们可以通过下标访问数组的元素,那么我们如何访问结构的成员呢?就点(。)与结构构件运算符;结构名称。成员名称;注意:点的组合是从左到右的,在所有操作符中优先级最高;比如s1.title是指s1的标题部分,s1.author是指s1的作者部分,s1.value是指s1的值部分。 然后可以像使用字符数组一样使用s1.title和s1.value比如浮点数据类型。注:S1;虽然是结构,但是s1.value是float类型,所以s1.value相当于float类型的变量名,按照float类型使用;比如说;printf("%s %s %f ",s1.title,s1.author,S1 . value);//访问结构变量元素注意:scanf ("%d ",& S1 . value);这个语句有两个操作符,&和结构成员操作符点,我们应该设置(s1 括起来,因为它们是整体,所以代表s1的价值部分。)但是如果我们不把它们括起来,它就是&,因为点的优先级高于& 5.2如果其成员本身是结构类型,可以通过几个成员操作符逐级查找最低级别成员来操作;结构名称,成员,子成员结构日期{ int yearint月;int日;};struct student { char name[10];结构日期生日;} student1//如果要引用学生的出生日期,可以表示为;student . brithday . year;布里戴是学生中的一员;Year是brithday的成员;5.3整体与分离5.3.1一个结构变量可以整体赋给同类型的另一个结构变量,可以达到整体赋的效果;这个成员变量的值将作为一个整体赋给另一个变量;5.3.2一个结构变量不能作为一个整体输入输出;在输入和输出结构数据时,必须分别指出结构变量的每个成员;+总结:除了“同类型的结构变量可以整体相互赋值”以外,其他情况下都不能整体引用,只能单独引用到每个成员;6.结构数组(这种类型,高二经常考,只考结构是离不开结构数组和成员的访问的,当然只是简单的操作)6.1为什么要引用结构数组?显然,在上面的book-type结构中,每本书都需要用一个Book-type结构变量来描述。如果要描述两本书,就需要用两个这样的变量,以此类推;因此,应该使用这种结构的数组来表示这些书籍;而数组是存储一组同类型的数据,所以出现了结构数组。注意这个设置。6.2宣告结构数组与普通数组宣告相同,int a[10];是int元素的数据类型,A是数组名[10],表示应用10的int单元的内存;再看结构公告;结构图书库[10];类似吗?StrutBook是数组元素的数据类型,library是数组名,[10]是应用了10个StrutBook单元的内存;解释;公告库是一个由10个元素组成的特定数组,每个元素都有一个book结构,所以可以得到library [0],library [1] ……注意,库本身不是一个结构名,而是一个数组名;6.3结构数组的初始化初始化有两种:定义时赋值的两种情况;6.4访问结构数组的成员规则:在结构名后面加一个运算符,然后是成员名;图书馆[5]。标题;//表示第5个元素的标题成员;Library[5]是结构变量名,title是成员名;图书馆[5]。titlt[4];//注意title是数组类型,第5个数组元素的title成员的第4个字符;总结:数组library//图书结构library[2]//数组的第二个元素,图书结构类型的变量名;库[2]。标题;//char array,结构数组第二个元素的标题成员;库[2]。标题[4];//表示一个字符,结构数组第二个元素的标题成员的第四个字符;7.结构指针7.1使用结构指针的好处;就像数组的指针,比数组本身更容易操作,结构的指针通常比结构本身更容易操作。并宣布structbook * him即struct结构名+*+指针名;这个公告没有创建新的结构,而是创建了一个指针类型him指针变量,它可以指向任何现有的book类型结构;him = & amp库[0];指针him指向结构库[0]。我如何使用他来获得库[0]的成员?方法一:引入一个运算符,->;后跟->:指向运算符结构的指针与后跟。点运算符;注意:你不能用他。成语;因为him不是一个结构名;总结:->;仅用于结构指针访问成员;。点仅用于通过结构名访问成员;方法二:如果him = & Library[0],那么Him = Library[0];因为& amp;And是一个互逆运算符;& amp地址,*值;= "资源库[0]。价值相当于(*他)。价值;注意需要使用括号,优先级问题;那么它和him.value的作用是一样的;对于第二次考试,知道以上就差不多了。8.向函数传递结构信息8.1传递结构成员可以作为参数传递给接受这个特定参数类型的函数,只要结构成员具有单值数据类型(以及int等基本数据类型);注意:只能访问,不能修改;8.2使用结构地址注意:如果不修改值,则设置为const8.3,其中S也是结构变量,是s1结构变量的副本。 摘要:结构指针,使用->:运算符访问成员;结构名称;使用。点运算符来访问成员;如果想通过调用函数修改变元结构变量的值,只能传递地址,用指针修改;直接在地址修改;8.4结构之间的双向通信。首先注意这个:在C语言中,结构变量可以整体赋值。无论它们的成员如何传递地址,都是使用结构指针接收的,结构指针用于访问,无需修改;Const限制修改,结构作为参数传递,所以实参无法修改成功,只能访问;作为参数,修改结构,返回类型,达到修改的目的。传递地址,用结构指针接收,用它修改,不要用const限制修改。通常,我们使用结构指针。如果不修改,我们就用const来修改。9.使用字符数组或字符指针在结构中存储字符串。先给出答案:尽量用字符数组;9.1使用字符数组# DEFINE MAX TITL 100 # DEFINE MAX autl 100 STRUCT BOOK { CHARTILE[MAX TITL];//用字符串表示的titile标题;char作者[maxa utl];//由字符串表示的作者;浮点值;//价值价格的浮点表示形式;};字符串存储在结构内部;该结构使用字符指针structbook { char * title将总共200字节的内存分配给这两个字符串9.2。char *作者;};在这里,的字符串存储在编译器认为存储字符串常量的任何地方。这个结构中只存储了两个地址,值被分配了8个字节。该结构不为字符串分配任何内存存储空间,因此在输入时存在潜在的危险;scanf("%s ",s . last);//将字符串放入s.last所指向的内存中因为这是一个未初始化的变量,地址可以指向任意大小,所以此时是一个潜在的危险;总结:因为我们最好用字符数组来存储字符串;


  • 全部评论(0)
资讯详情页最新发布上方横幅
最新发布的资讯信息
【技术支持|常见问题】1556原创ng8文章搜索页面不齐(2024-05-01 14:43)
【技术支持|常见问题】1502企业站群-多域名跳转-多模板切换(2024-04-09 12:19)
【技术支持|常见问题】1126完美滑屏版视频只能显示10个(2024-03-29 13:37)
【技术支持|常见问题】响应式自适应代码(2024-03-24 14:23)
【技术支持|常见问题】1126完美滑屏版百度未授权使用地图api怎么办(2024-03-15 07:21)
【技术支持|常见问题】如何集成阿里通信短信接口(2024-02-19 21:48)
【技术支持|常见问题】算命网微信支付宝产品名称年份在哪修改?风水姻缘合婚配对_公司起名占卜八字算命算财运查吉凶源码(2024-01-07 12:27)
【域名/主机/服务器|】帝国CMS安装(2023-08-20 11:31)
【技术支持|常见问题】通过HTTPs测试Mozilla DNS {免费源码}(2022-11-04 10:37)
【技术支持|常见问题】别告诉我你没看过邰方这两则有思想的创意广告! (2022-11-04 10:37)

联系我们
Q Q:375457086
Q Q:526665408
电话:0755-84666665
微信:15999668636
联系客服
企业客服1 企业客服2 联系客服
86-755-84666665
手机版
手机版
扫一扫进手机版
返回顶部