C语言程序设计:结构体与共用体详解
版权申诉
191 浏览量
更新于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语言编程的基础,它们使得程序能够灵活地处理复杂的数据结构和内存需求。在实际编程中,熟练掌握这些概念能帮助开发者更有效地组织和管理数据。
2021-09-28 上传
2022-05-07 上传
2022-07-11 上传
2022-06-18 上传
2022-06-18 上传
等天晴i
- 粉丝: 5949
- 资源: 10万+
最新资源
- ballista:现代网络的互操作性系统
- gsheet-planner:聪明的,可自动排序的Google表格计划器
- 翻译翻译什么叫HTML5(一)配套代码资源包
- Towering Yoga Masters Free Game-crx插件
- 我的
- Toolint-tests-Empty-TC-Add-Tools-2021-03-11T20-17-21.121Z:为工具链创建
- List:用CodeSandbox创建
- timecat-mmo::smiling_cat_with_heart-eyes: 时间猫,但是一个 MMO
- 视觉暂留测试工具-crx插件
- 变色龙:BAOBAB服务器的“第二层”模型交互层
- Perifa_Acessa:Com recursos de voz(acessibilidade)podendo ser a Alexa(Firefox)ou o Watson(Microsoft),Recursos de Hand Talk eImplementaçõesde melhorias a fazer,esteéum eta(protótipo)
- posterus:具有取消功能,可调度控制和协程的可组合异步原语(期货)
- OS-Places:演示和代码示例的OS Places存储库
- Commando Girl Free Games-crx插件
- PSTools GUI:PSTools 的图形前端-开源
- 彼得里斯