C语言中的结构体与公用体:定义、使用与比较

在C语言中,结构体(struct)和公用体(union)是两种复合数据类型,它们允许你将不同类型的数据组合成一个单独的数据类型。然而,它们在内存使用和成员访问方面有所不同。

图片[1]_C语言中的结构体与公用体:定义、使用与比较_知途无界

结构体(struct)

结构体是一种复合数据类型,它允许你组合不同类型的数据项(称为成员)到一个单一的数据类型中。

定义结构体

struct Student {  
    char name[50];  
    int age;  
    float score;  
};

这里定义了一个名为Student的结构体,它有三个成员:nameagescore

使用结构体

你可以创建结构体的变量,并访问其成员。

struct Student s1;  
s1.name = "Alice";  
s1.age = 20;  
s1.score = 90.5;

结构体的大小

结构体的大小是其所有成员大小的总和,并考虑内存对齐。

公用体(union)

公用体也是一种复合数据类型,但它与结构体不同。在公用体中,所有的成员都占用同一块内存区域,且该内存区域的大小足够存储其最大的成员。

定义公用体

union Data {  
    int i;  
    float f;  
    char str[20];  
};

这里定义了一个名为Data的公用体,它有三个成员:ifstr

使用公用体

你可以创建公用体的变量,并访问其成员。但请注意,由于所有成员都占用同一块内存,因此一次只能存储一个成员的值。

union Data d;  
d.i = 10; // 现在d的内存区域存储的是整数10  
d.f = 20.5; // 现在d的内存区域存储的是浮点数20.5,之前的整数10被覆盖

公用体的大小

公用体的大小是其最大成员的大小,因为它只分配足够的内存来存储其最大的成员。

结构体与公用体的比较

  • 内存使用:结构体使用其所有成员所需的总内存,而公用体只使用足够存储其最大成员的内存。
  • 成员访问:在结构体中,你可以同时存储和访问所有成员的值。但在公用体中,一次只能存储和访问一个成员的值,因为所有成员都共享同一块内存。
  • 用途:结构体通常用于将逻辑上相关的数据组合在一起,而公用体通常用于节省内存,或在特定情况下需要在同一内存位置存储不同类型的数据。
© 版权声明
THE END
喜欢就点个赞,支持一下吧!
点赞68 分享
评论 抢沙发
头像
欢迎您留下评论!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容