C语言中结构与结合的区别

  • Post category:C

C语言中结构(struct)与结合(union)是两个常用的数据类型。它们不仅有相似之处,也有很多的区别。

结构体(struct)

结构(struct)是一种自定义的复合数据类型。它可以将不同数据类型的成员组合成一个整体,在程序中方便地传递、使用和存储。

定义结构体

结构体的定义包含两个部分:结构体声明和结构体定义。

结构体声明用于声明结构体类型,格式如下:

struct 结构体名称;

结构体定义用于定义结构体成员,格式如下:

struct 结构体名称 {
    数据类型 成员1;
    数据类型 成员2;
    ...
};

示例代码:

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

初始化结构体

结构体可以通过以下两种方式进行初始化:

  • 逐个成员初始化法
  • 整体初始化法

逐个成员初始化法:

struct Student stu1;
strcpy(stu1.name, "张三");
stu1.age = 18;
stu1.sex = 'M';
stu1.score = 98.5;

整体初始化法:

struct Student stu2 = {"李四", 20, 'F', 89.5};

访问结构体成员

可以使用点(.)运算符或箭头(->)运算符访问结构体成员。

点运算符用于访问结构体变量的成员。例如:

printf("姓名:%s\n", stu1.name);
printf("年龄:%d\n", stu1.age);
printf("性别:%c\n", stu1.sex);
printf("分数:%f\n", stu1.score);

箭头运算符用于访问结构体指针变量所指向的成员。例如:

struct Student *pstu = &stu2;
printf("姓名:%s\n", pstu->name);
printf("年龄:%d\n", pstu->age);
printf("性别:%c\n", pstu->sex);
printf("分数:%f\n", pstu->score);

联合体(union)

联合体(union)也是一种自定义的复合数据类型。它与结构体类似,也可以将不同数据类型的成员组合在一起,但是它的成员只能够同时被使用。

定义联合体

联合体的定义格式如下:

union 联合体名称 {
    数据类型 成员1;
    数据类型 成员2;
    ...
};

示例代码:

union DataType {
    int i;
    char ch;
    float f;
};

联合体的使用

在联合体中,不同的成员共享同一块内存空间,这意味着在使用某一个成员时,其他成员的值会被覆盖。

例如:

union DataType data;
data.i = 100;
printf("整数型成员变量值为:%d\n", data.i);
data.f = 3.14;
printf("浮点型成员变量值为:%f\n", data.f);

上述程序输出结果为:

整数型成员变量值为:100
浮点型成员变量值为:3.140000

在这个例子中,我们赋值给整数型成员变量后,又赋值了浮点型成员变量,则整数型成员变量的值被覆盖。

总结

结构与联合都可以将不同数据类型的成员集合成为一组数据,在程序中方便使用。

不同之处在于:

  • 结构体的成员占用独立的内存空间,可以同时访问。
  • 联合体的成员共享同一块内存空间,不能同时访问。

因此,结构体适用于描述多个属性的实体,而联合体则适用于需要交替使用不同数据类型的场合。