C语言 结构体 共用体

C语言 结构体 共用体

结构体

1、结构体定义
a、
struct 结构体名称{
成员列表;
};
struct 结构体名称 结构体变量名;
b、
struct 结构体名称{
成员列表;
}变量名,变量名、、、;
c、
struct {
成员列表;
}变量名,变量名、、、;
2、结构体成员
1> 结构体成员就是结构体包含的变量;
2> 结构体成员一般是基本数据类型,可以是数组,指针,结构体,共用体;
3> 创建结构体变量后需要给成员赋值,没有赋值就使用会导致程序异常;
4> 结构体成员的使用: 变量名.结构体成员名
总结
不同结构体变量的成员是独立的,一个结构体成员的变更,不会影响另一个结构体变量的成员;

共用体

1、介绍
a、共用体也叫联合体,属于构造类型;
b、共用体和结构体类似,也可以包含多个不同类型的成员,但由于结构体又有本质上的不同;
c、结构体的各个成员变量之间会占用,相互之间不会影响;共用体所有成员占有同一块内存空间,修改一个成员变量会影响其他成员;
2、定义
1>
union 共用体名称{
成员列表;
};
union 共用体名称 变量名;
2>
union 共用体名称 {
成员列表
}变量名,变量名、、、;
3>
union {
成员列表
}变量名,变量名、、、;

### 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`.由于这两个动作发生在连续执行流所以第二次赋值实际上破坏掉了第一次的结果。最后字符串被复制到同一个地方再次改变了整个联合体的状态。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值