欢迎访问宙启技术站
智能推送

C之 struct 和 union(十)

发布时间:2023-05-18 08:34:16

本文简要介绍了C语言中的struct和union两种数据类型,包括它们的定义方法、使用方法以及注意点。

struct的定义方法

struct可以定义一个由多个成员变量组成的数据类型。定义方法如下:

struct [struct_name] {
    type1 member1;
    type2 member2;
    ...
    typeN memberN;
};

其中,[struct_name]是结构体的名称,type1至typeN表示成员变量的数据类型,member1至memberN表示成员变量的名称。

例如,定义一个包含学生姓名、年龄和成绩的结构体可以这样写:

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

定义完结构体后,就可以通过它来声明变量了:

struct Student s1;
s1.age = 18;
strcpy(s1.name, "Tom");
s1.score = 98.5;

也可以直接在定义结构体的同时声明变量:

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

使用struct时需要注意变量名冲突的问题,可以使用typedef关键字将结构体类型重命名为一个新的类型名以解决冲突问题:

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

这样,以后就可以直接使用Student作为结构体名称了。

union的定义方法

union和struct类似,但是所有成员变量共享同一个内存空间,因此大小为所有成员变量中最大的一个。定义方法如下:

union [union_name] {
    type1 member1;
    type2 member2;
    ...
    typeN memberN;
};

其中,[union_name]是联合体的名称,type1至typeN表示成员变量的数据类型,member1至memberN表示成员变量的名称。

例如,定义一个包含整型、浮点型和字符型的联合体可以这样写:

union Data {
    int i;
    float f;
    char c;
};

定义完联合体后,就可以通过它来声明变量了:

union Data d;
d.i = 10;
printf("%d
", d.i); // 输出10
d.f = 3.14;
printf("%f
", d.f); // 输出3.140000
d.c = 'A';
printf("%c
", d.c); // 输出A

注意事项

struct和union都是用户自定义的数据类型,因此使用时需要注意以下几点:

1. struct和union的成员变量可以是任何数据类型,也可以是另一个struct或union类型,从而形成嵌套的数据结构。

2. 在定义struct和union类型时,成员变量的名称和类型都可以省略,只留下一个分号,这样定义的类型称为匿名类型。

3. struct和union中成员变量的内存排列顺序是系统实现相关的,即成员变量的地址不一定是连续的,可以使用sizeof运算符来获取结构体所占用的空间大小。

4. 在为struct和union变量赋值时,成员变量的顺序和类型必须和定义时保持一致,否则会产生类型错误或数据损坏的风险。

5. 共用体union中成员变量共享同一块内存,因此在修改其中任意一个成员变量时,会影响其他成员变量的值。

总之,struct和union都是在C语言中非常重要的数据类型,掌握它们的定义和使用方法,有助于我们更好地设计和实现复杂的数据结构和算法。