📜  C |结构与联合|问题6(1)

📅  最后修改于: 2023-12-03 15:13:47.428000             🧑  作者: Mango

C语言中的结构与联合

在C语言中,结构(structure)和联合(union)是常见的数据类型,它们可以用来组织和存储不同类型的数据。本文将详细介绍在C语言中如何使用结构和联合,并介绍它们的区别和使用注意事项。

结构(structure)

在C语言中,结构是一种构造型数据类型,它可以将不同类型的数据组合在一起,构成一个新的数据类型。结构的每一个成员可以是任意的C语言数据类型,包括基本数据类型、指针、数组、结构等。

定义结构

结构的定义形式为:

struct 结构体名 {
    类型1 成员名1;
    类型2 成员名2;
    ...
    类型n 成员名n;
};

其中,struct是关键字,后面紧跟着的结构体名是结构的名称。

以下是一个定义person结构的示例:

struct person {
    char name[20];
    int age;
    float height;
};

这个结构定义了一个person类型,它由三个成员组成:name是一个20个字符长度的字符串,age是一个整数,height是一个浮点数。

结构赋值

结构变量的赋值可以通过以下形式实现:

struct person p1, p2;
p1.age = 20;
strcpy(p1.name, "张三");
p2 = p1;
结构传递参数

结构可以作为函数参数进行传递,具体形式如下:

void print_person(struct person p) {
    printf("姓名:%s\n年龄:%d\n身高:%f\n", p.name, p.age, p.height);
}
结构指针

结构也可以通过指针进行操作,以下是一些常见的结构指针操作示例:

struct person *p3 = &p1;
printf("姓名:%s\n年龄:%d\n身高:%f\n", p3->name, p3->age, p3->height); //使用结构指针访问结构变量的成员
联合(union)

在C语言中,联合是一种数据类型,它的特点是它的所有成员变量共享同一段内存。在联合中,只有一个成员变量可以被有效地使用,因此联合的大小和它的最长成员变量的大小相同。

定义联合

联合的定义形式为:

union 联合体名 {
    类型1 成员名1;
    类型2 成员名2;
    ...
    类型n 成员名n;
};

以下是一个定义book联合的示例:

union book{
    int pages;
    float price;
    char name[20];
};

这个联合里面有3个成员:pages是整数类型,price是浮点类型,name是一个20个字符长度的字符串。

联合的使用

联合中只有一个成员可以有效被使用,也只有该成员的值是有效的,其他成员的值是未定义的。联合的使用形式和结构类似。

union book b;
b.pages = 100;
printf("book.pages = %d\n", b.pages);
b.price = 20.5;
printf("book.price = %f\n", b.price);
strcpy(b.name, "C语言程序设计");
printf("book.name = %s\n", b.name);

这个例子中,首先给联合变量bpages成员变量赋值100,然后输出book.pages = 100。接下来将bprice成员变量赋值20.5,然后输出book.price = 20.5。最后,将bname成员变量赋值字符串"C语言程序设计",然后输出book.name = C语言程序设计

另外还可以通过指针操作联合的成员:

union book *b1 = &b;
printf("%d\n", b1->pages); //输出联合成员pages的值
结构(structure)与联合(union)的区别

结构体和联合体的定义格式类似,它们最主要的区别是它们分别如何使用内存空间。

结构体用于定义数据类型,可以将不同的数据类型组合在一起,从而形成新的数据类型。结构体的每个成员变量是分开存储的,每个成员变量都有自己的内存空间,并且结构体占用的内存空间等于所有成员变量所占的内存空间之和。

联合体是一种特殊的数据类型,它允许你在同一个内存空间中存储不同的数据类型。联合体的成员变量共享同一段内存空间,每个成员变量被赋值后,其他成员变量就失效了。联合体占用的内存空间等于最长的成员变量所占用的空间。

总结

本文介绍了在C语言中如何使用结构和联合,并介绍了它们的区别和使用注意事项。通过学习本文,你应该对如何使用结构体和联合体有一个初步的了解,能够应用它们来组织和存储复杂的数据。