【C语言知识复习】结构体与链表 | 您所在的位置:网站首页 › c语言结构体总结 › 【C语言知识复习】结构体与链表 |
在C语言中,可以使用结构体(Struct)来存放一组不同类型的数据。 一、结构体的四种声明方式方式1:先声明结构体名,后声明结构变量名 struct 结构体名{ 成员变量/数组类型标识 成员变量/数组名;};struct 结构体名 结构体变量名; 方式2:同时声明结构体名和结构变量名 struct 结构体名{ 成员变量/数组类型标识 成员变量/数组名;} 结构变量名; 方式3:只声明结构变量名,不声明结构体名(后续无法再声明该结构体类型变量) struct { 成员变量/数组类型标识 成员变量/数组名;} 结构变量名; 方式4:使用typedef先声明结构体名,后声明结构体变量(结构体名1可以被省略) struct { 成员变量/数组类型标识 成员变量/数组名;} 结构变量名;体名2;结构体名2 结构体变量名;struct 结构体名1 结构体变量名; 二、结构体变量中成员的引用方式结构体变量名.成员名 也可以用代表结构体变量首地址的指针(p)来引用成员: (*p).成员名 或者 p->成员名 三、动态内存分配与释放使用动态分配优势:可以灵活控制内存使用,提高内存的利用率;可以跨函数使用内存 (因为必须手动释放)。 劣势:当忘记释放内存时,将导致内存泄漏;代码稍微复杂一些。 使用 malloc() 函数的都可以称为动态分配内存, 如: int *ptr=(int *)malloc(sizeof(int)*5);说明:强制转换类型,与括号中一致。malloc(整型参数) 函数返回第一个字节的地址给ptr指针变量。 使用 free() 函数实现对动态内存的释放, 如: free(ptr);说明:把ptr所代表的动态分配的内存释放。 使用 realloc()函数修改内存空间,如: (int *)realloc(ptr,sizeof(int)*N);说明:如果有足够空间用于扩大,则分配额外内存,并返回地址。 如果原先的内存大小后面没有足够的空闲空间用来分配,那么从堆中另外找一块内存。并把原来大 小内存空间中的内容复制过去。返回新的指针。(数据被移动了)。 因此,若realloc成功,指向原内存地址的指针就成了悬挂指针,即指针指向了一块没有分配给用户使用的内存,如果再用该指针进行操作就可能发生意想不到的问题。所以在应用realloc函数是应当格外注意这种情况。 |
CopyRight 2018-2019 实验室设备网 版权所有 |