C语言程序设计:结构体与共用体详解

版权申诉
0 下载量 9 浏览量 更新于2024-07-08 收藏 754KB PPT 举报
"C语言程序设计中的结构体与共用体是重要的数据组织形式,用于组合不同类型的数据。结构体允许用户自定义新的数据类型,而共用体则提供了一种在有限内存空间内存储多种数据的机制。在C语言中,结构体类型的定义使用`struct`关键字,它描述了数据的组织结构,但不实际分配内存。结构体变量的定义则会为每个成员分配内存。此外,结构体可以与指针结合使用,以便于访问和操作结构体内的元素。" 在C语言中,结构体(`struct`)是一种构造数据类型,它允许我们将不同类型的数据如整型、字符型、浮点型等组合到一起,形成一个新的复合数据类型。例如,我们可以通过定义一个名为`student`的结构体来存储学生的相关信息,如学号(`num`)、姓名(`name`)、性别(`sex`)、年龄(`age`)、分数(`score`)和地址(`addr`)。结构体的定义如下: ```c struct student { int num; char name[20]; char sex; int age; float score; char addr[30]; }; ``` 结构体类型定义仅描述了数据的结构,不分配内存。要创建结构体变量,我们需要另外进行声明,例如: ```c struct student stu1, stu2; ``` 这将分别为`stu1`和`stu2`分配足够的内存来存储`student`结构体的所有成员。 结构体与指针的结合也很常见,我们可以通过定义指向结构体的指针来间接访问结构体的成员。例如,如果`p`是一个指向`student`结构体的指针,我们可以这样访问其成员: ```c struct student *p = &stu1; printf("Student number: %d\n", p->num); ``` 共用体(`union`)则是另一种数据类型,它在一个内存位置上存储多个成员,而不是为每个成员分配独立的内存。这意味着,任何时刻只有一个成员的值是有效的。例如: ```c union myUnion { int num; float score; }; ``` 在这个例子中,`myUnion`的大小只与它的最大成员(这里可能是`float`)相同,而不是所有成员的总和。当我们改变一个成员的值时,之前存储在该位置的其他成员的值将被覆盖。 动态内存管理在C语言中也非常重要,这里提到了几个关键函数: 1. `malloc(unsigned int size)`:为指定大小的字节申请内存,返回一个指向新分配内存的指针。 2. `calloc(unsigned n, unsigned size)`:为`n`个大小为`size`的元素申请内存,返回一个指向新分配内存的指针,并将所有字节初始化为0。 3. `realloc(void *p, unsigned int size)`:重新调整已分配内存的大小,`p`是原始指针,`size`是新的大小。如果成功,返回指向新内存的指针,原内存可能被移动。 4. `free(void *p)`:释放由`p`指向的内存块。 理解结构体、共用体以及动态内存管理是C语言编程的基础,它们使得程序能够灵活地处理复杂的数据结构和内存需求。在实际编程中,熟练掌握这些概念能帮助开发者更有效地组织和管理数据。