头歌c语言结构体共用体
时间: 2025-01-03 11:35:13 浏览: 8
### C语言中的结构体
#### 定义与基本语法
结构体是C语言中一种自定义的数据类型,允许程序员组合不同类型的数据项。通过使用`struct`关键字来定义一个新的数据类型[^2]。
```c
struct Student {
char name[50];
int age;
float gpa;
};
```
上述代码片段展示了如何创建一个名为`Student`的结构体,它包含了三个不同类型的成员变量:字符数组用于存储名字、整数表示年龄以及浮点数记录GPA成绩。
为了简化后续编码工作并提高可读性,可以利用`typedef`语句给这个复合型赋予另一个更容易理解的名字[^3]:
```c
typedef struct {
char title[50];
char author[50];
char subject[100];
int book_id;
} Book;
Book my_book; // 可以直接用Book作为类型名声明对象
```
#### 访问结构体成员
一旦有了结构体实例之后就可以很方便地访问其各个字段了。假设有一个叫做`student`的对象,则可以通过`.`操作符获取或设置其中任何一个属性值:
```c
strcpy(student.name, "Alice");
student.age = 20;
student.gpa = 3.8;
```
对于指针指向结构的情况则需采用箭头(`->`)运算符来进行存取操作.
---
### C语言中共用体(Union)
#### 基本概念
共用体也是一种用户自定义的数据类型,在内存布局上与结构体相似之处在于它们都是一组具有相同起始地址但可能长度不同的元素集合;然而两者之间存在本质区别——即同一时刻只能保存其中一个成员的有效值[^4].
这意味着当向某个联合体内写入新数据时会覆盖之前存在的任何其他成员的内容,并且所有组成部分共享相同的物理位置空间大小取决于最大那个成分所占用字节数量。
下面是一个简单的例子说明怎样去构建和初始化一个union :
```c
#include <stdio.h>
union Data {
int i;
float f;
char str[20];
};
int main() {
union Data data;
data.i = 10;
printf("data.i: %d\n", data.i);
data.f = 220.5;
printf("data.f: %.2f\n", data.f);
strcpy(data.str,"Hello");
printf("data.str: %s\n", data.str);
return 0;
}
```
这段程序先将整数值赋给了`i`,接着又把单精度实数分配给了`f`.由于这两个动作发生在连续执行流里所以第二次赋值实际上破坏掉了第一次的结果。最后字符串被复制到同一个地方再次改变了整个联合体的状态。
---
阅读全文