C程序中结构体和联合体的区别


C语言中,我们有容器可以存储相同数据类型以及不同数据类型的数据。C语言提供数组的概念来存储相同类型的数据变量;而对于存储不同类型的数据,C语言提供了结构体联合体的概念。

结构体和联合体都可以容纳不同类型的数据,但根据它们内部的实现方式,我们可以在两者之间找到一些差异。阅读本文以了解更多关于结构体和联合体以及它们之间区别的信息。

什么是C程序中的结构体?

在C语言编程中,结构体是一种用户自定义的数据类型。它主要用于将不同的数据类型组合成单个数据类型。C程序中的结构体可以包含多个成员和结构体变量。为了定义结构体,使用'struct'关键字。要访问结构体的成员,我们使用点(.)运算符

语法

C语言中结构体的语法如下:

struct structure_name {
   member definition;
} structure_variables;

其中,

  • structure_name 是赋予结构体的名称。

  • member definition 是成员变量的集合。

  • structure_variable 是结构体的对象。

示例

#include <stdio.h>

struct book {
   char title[10];
   double price;
};

int main() {
   struct book book1 = {"C book", 800.12};

   printf("Title:  %s 
", book1.title); printf("Price: %lf
", book1.price); printf("Size of book struct: %lu", sizeof(struct book)); return 0; }

当您运行此程序时,输出将如下所示:

Title:  C book 
Price:  800.120000
Size of book struct: 24

什么是C程序中的联合体?

在C语言编程中,联合体也是一种用户自定义的数据类型。联合体的所有成员共享相同的内存位置。因此,如果我们需要对两个或多个成员使用相同的内存位置,那么联合体就是最佳的数据类型。最大的联合体成员定义了联合体的大小。

在C语言编程中,联合体类似于结构体,因为联合体变量的创建方式与结构体变量相同。为了在C程序中定义联合体,使用关键字“union”。

语法

C语言中联合体的语法如下:

union union_name {
   member definition;
} union_variables;

其中,

  • union_name 是赋予联合体的任意名称。

  • member definition 是成员变量的集合。

  • union_variable 是联合体的对象。

示例

#include <stdio.h>
#include <string.h>

union Data {
   int i;
   float f;
};

int main() {
   union Data data;

   data.i = 12;
   data.f = 20.4;

   printf("data.i: %d 
", data.i); printf("data.f: %f
", data.f); return 0; }

当您运行此程序时,输出将如下所示:

data.i: 1101214515 
data.f: 20.400000 

结构体和联合体的区别

以下是结构体和联合体之间的一些重要区别:

关键

结构体

联合体

定义

结构体是在C语言中定义的容器,用于存储不同类型的数据变量,并且支持用户自定义变量的存储。

联合体也是C语言中一种类似的容器,可以容纳不同类型的变量以及用户自定义变量。

内部实现

C语言中的结构体是内部实现的。每个输入成员都被分配了单独的内存位置。

而在联合体中,内存只分配给所有输入变量中大小最大的一个成员,并且该位置由所有这些成员共享。

语法

在C语言中声明结构体的语法如下:

struct struct_name{
   type element1;
   type element2;
   .
   .
} variable1, variable2, ...;

在C语言中声明联合体的语法如下:

union u_name{
   type element1;
   type element2;
   .
   .
} variable1, variable2, ...;

大小

结构体的成员没有共享位置,因此结构体的大小等于或大于所有数据成员大小的总和。

联合体的成员没有单独的位置,因此其大小等于所有数据成员中最大成员的大小。

值存储

对于结构体,每个输入数据成员都有特定的内存位置,因此它可以存储不同成员的多个值。

在联合体中,所有输入数据成员只有一个共享的内存分配,因此它一次只为所有成员存储一个值。

初始化

在结构体中,可以同时初始化多个成员。

在联合体中,一次只能初始化第一个成员。

结论

结构体和联合体都是C语言编程中的复合数据类型。结构体和联合体之间最显著的区别在于它们存储数据的方式。结构体将每个成员存储在单独的内存位置,而联合体将其所有成员存储在同一个内存位置。

更新于: 2024年6月28日

29K+ 浏览量

开启您的职业生涯

通过完成课程获得认证

开始学习
广告