还剩25页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
《C语言结构体》PPT课件•结构体的基本概念contents•结构体的基本操作•结构体的应用目录•结构体的内存布局•结构体的嵌套•结构体的动态内存分配01结构体的基本概念结构体的定义结构体是一种自定义结构体名称是自定义的数据类型,可以包的标识符,用于标识含多个不同类型的数该结构体类型据成员结构体的定义使用`struct`关键字,后跟结构体的名称和数据成员列表结构体的用途结构体可以用来组合多个相关通过结构体,可以将不同类型结构体可以用于实现复杂的数的数据项,形成一个完整的对的数据组合在一起,方便数据据结构,例如链表、树等象或数据结构的处理和传递结构体的创建与初始化创建结构体变量时,需要使用`struct`关键字和结构体名称来声明可以使用成员初始化器来初始化结构体变量,将各个数据成员的值一次性设置好也可以在声明的同时进行初始化,或者通过赋值操作逐个设置各个数据成员的值02结构体的基本操作访问结构体成员使用点运算符(.)访问结构体成员通过在结构体变量名后加上点运算符,可以访问结构体的成员变量例如,如果有一个名为`student`的结构体变量,可以使用`student.name`来访问其`name`成员变量使用箭头运算符(-)访问结构体成员当结构体指针被用于访问结构体成员时,需要使用箭头运算符例如,如果`pStudent`是一个指向`student`结构体的指针,可以使用`pStudent-name`来访问其`name`成员变量修改结构体成员使用赋值运算符(=)修改结构体成员可以直接使用赋值运算符将新值赋给结构体的成员变量例如,`student.age=20;`将把`student`结构体的`age`成员变量设置为20使用指针修改结构体成员如果使用结构体指针访问结构体成员,也可以通过指针来修改成员变量的值例如,`*pStudent.age=20;`将通过指针`pStudent`修改其指向的结构体的`age`成员变量的值结构体的赋值与比较结构体的赋值可以使用赋值运算符(=)将一个结构体变量的值赋给另一个结构体变量例如,`student2=student1;`将把`student1`的结构体内容复制给`student2`结构体的比较可以使用比较运算符(==、!=、、、=、=)来比较两个结构体变量比较操作符将逐个比较两个结构体的成员变量,如果所有对应成员都相等,则整个结构体被视为相等例如,`if student1==student2`将检查两个结构体变量是否完全相等03结构体的应用结构体在数据存储中的应用节省内存通过结构体,可以更有效地利用内数据封装存,因为可以只存储实际需要的数据,而不是创建多个单独的变量结构体允许将多个不同类型的数据组合成一个单一的数据类型,方便数据的存储和管理提高代码可读性结构体可以清晰地表示数据的组成,使得代码更易于理解和维护结构体在函数参数传递中的应用010203传递复杂数据避免数据拷贝提高代码复用性函数参数可以使用结构体通过使用指针传递结构体,通过将数据和操作数据的类型,以传递复杂的数据可以在函数调用中避免数函数封装在结构体中,可结构,例如数组、字符串据的拷贝,提高效率以提高代码的复用性等结构体在数据交换中的应用数据标准化数据序列化数据共享在不同的程序或系统中,结构体可以方便地将数据在不同的程序或系统之间,可以通过定义标准化的结转换为字节流,实现数据可以通过共享结构体的定构体来确保数据的格式一的存储和传输义来实现数据的共享和交致换04结构体的内存布局内存对齐的概念内存对齐有助于提高程序的性能和稳内存对齐是一种计算机内存管理的技定性,因为不正确的内存对齐可能会术,用于优化数据在内存中的存储方导致CPU访问数据的速度变慢,甚至式,以提高数据访问的速度和效率引发错误在C语言中,内存对齐是指将数据按照一定的规则放置在内存中,使得数据能够以最优的方式被CPU访问内存对齐的方式自然对齐强制对齐自定义对齐根据数据类型的大小和系统的字通过在数据类型前添加填充字节,通过指定对齐的起始地址和数据节顺序,自动将数据放置在内存使得数据满足特定的对齐要求类型的大小,自定义数据的内存中布局结构体的内存布局示例示例1一个包含整型、浮点型和字符型成员的结构体,按照默认的对齐方式进行内存布局示例2一个包含多个整型成员的结构体,通过指定对齐方式为4字节对齐,进行内存布局示例3一个包含结构体数组的结构体,按照数组元素的类型和大小进行内存布局05结构体的嵌套嵌套结构体的定义与创建定义嵌套结构体在结构体内部定义另一个结构体,通过使用“struct”关键字创建嵌套结构体变量在主结构体变量中创建嵌套结构体变量,通过使用“.”运算符初始化嵌套结构体在创建主结构体变量时,可以同时初始化嵌套结构体变量嵌套结构体的访问与修改访问嵌套结构体变量通过使用“.”运算符,可以访问嵌套结构体中的1成员修改嵌套结构体变量通过使用“.”运算符,可以修改嵌套结构体中的2成员传递嵌套结构体参数在函数调用时,可以将嵌套结构体作为参数传递3给函数嵌套结构体的应用示例定义学生信息结构体01包含学生姓名、学号、成绩等信息,其中成绩是一个嵌套的结构体,包含科目和分数创建学生信息变量02创建一个学生信息变量,并初始化各个成员的值访问和修改学生信息03通过使用“.”运算符,可以访问和修改学生信息中的各个成员的值06结构体的动态内存分配使用malloc函数动态分配内存malloc函数用于在堆区动态分配指定大小的内存空间,并返回指向该空间的指针使用malloc函数时需要手动计算内存地语法void*mallocsize_t size;址,并使用强制类型转换将void指针转换为指定类型的指针返回值返回一个指向分配的内存空间参数size_t size表示要分配的内存大的指针,如果分配失败则返回NULL小使用calloc函数动态分配内存并初始化参数num表示要分配的元素个数,size表示每个元素的大小返回值返回一个指向分配的内语法void*callocsize_t num,存空间的指针,如果分配失败则size_t size;返回NULLcalloc函数用于在堆区动态分配使用calloc函数时会自动计算所指定大小的内存空间,并将该空需的总内存大小,并使用间初始化为0memset函数将该空间初始化为0使用free函数释放动态分配的内存语法void freevoid*ptr;参数ptr表示要释放的内存空间的指针注意事项使用free函数释放内存后,指针本身并不会被置为NULL,因此为了避免产生悬挂指针,建议在使用free函数释放内存后将指针置为NULLTHANKS感谢观看。