在C语言中,结构体(struct)和公用体(union)是两种复合数据类型,它们允许你将不同类型的数据组合成一个单独的数据类型。然而,它们在内存使用和成员访问方面有所不同。
![图片[1]_C语言中的结构体与公用体:定义、使用与比较_知途无界](https://zhituwujie.com/wp-content/uploads/2024/04/d2b5ca33bd20240418001020.png)
结构体(struct)
结构体是一种复合数据类型,它允许你组合不同类型的数据项(称为成员)到一个单一的数据类型中。
定义结构体
struct Student {char name[50];int age;float score;};struct Student { char name[50]; int age; float score; };struct Student { char name[50]; int age; float score; };
这里定义了一个名为Student
的结构体,它有三个成员:name
、age
和score
。
使用结构体
你可以创建结构体的变量,并访问其成员。
struct Student s1;s1.name = "Alice";s1.age = 20;s1.score = 90.5;struct Student s1; s1.name = "Alice"; s1.age = 20; s1.score = 90.5;struct Student s1; s1.name = "Alice"; s1.age = 20; s1.score = 90.5;
结构体的大小
结构体的大小是其所有成员大小的总和,并考虑内存对齐。
公用体(union)
公用体也是一种复合数据类型,但它与结构体不同。在公用体中,所有的成员都占用同一块内存区域,且该内存区域的大小足够存储其最大的成员。
定义公用体
union Data {int i;float f;char str[20];};union Data { int i; float f; char str[20]; };union Data { int i; float f; char str[20]; };
这里定义了一个名为Data
的公用体,它有三个成员:i
、f
和str
。
使用公用体
你可以创建公用体的变量,并访问其成员。但请注意,由于所有成员都占用同一块内存,因此一次只能存储一个成员的值。
union Data d;d.i = 10; // 现在d的内存区域存储的是整数10d.f = 20.5; // 现在d的内存区域存储的是浮点数20.5,之前的整数10被覆盖union Data d; d.i = 10; // 现在d的内存区域存储的是整数10 d.f = 20.5; // 现在d的内存区域存储的是浮点数20.5,之前的整数10被覆盖union Data d; d.i = 10; // 现在d的内存区域存储的是整数10 d.f = 20.5; // 现在d的内存区域存储的是浮点数20.5,之前的整数10被覆盖
公用体的大小
公用体的大小是其最大成员的大小,因为它只分配足够的内存来存储其最大的成员。
结构体与公用体的比较
- 内存使用:结构体使用其所有成员所需的总内存,而公用体只使用足够存储其最大成员的内存。
- 成员访问:在结构体中,你可以同时存储和访问所有成员的值。但在公用体中,一次只能存储和访问一个成员的值,因为所有成员都共享同一块内存。
- 用途:结构体通常用于将逻辑上相关的数据组合在一起,而公用体通常用于节省内存,或在特定情况下需要在同一内存位置存储不同类型的数据。
© 版权声明
文中内容均来源于公开资料,受限于信息的时效性和复杂性,可能存在误差或遗漏。我们已尽力确保内容的准确性,但对于因信息变更或错误导致的任何后果,本站不承担任何责任。如需引用本文内容,请注明出处并尊重原作者的版权。
THE END
暂无评论内容