C 语言 共用体操作

发布时间 2023-04-22 09:41:53作者: linux星

在C语言中,共用体是一种特殊的数据结构,它的所有成员都占用同一个内存空间,常用的共用体操作有:

 

1. 定义共用体

 

定义共用体使用`union`关键字,语法格式如下:

 

```c

union 共用体名称 {

    数据类型 成员名称1;

    数据类型 成员名称2;

    //...

};

```

 

例如:

 

```c

union Data {

    int num;

    char ch;

    float f;

};

```

 

2. 初始化共用体

 

共用体的初始化可以类比结构体的初始化,方式如下:

 

```c

union 共用体名称 共用体变量名称 = {成员1初始值, 成员2初始值, ...};

```

 

或者使用赋值语句进行初始化:

 

```c

union 共用体名称 共用体变量名称;

共用体变量名称.ch = 'A';

```

 

3. 访问共用体成员

 

共用体的所有成员都占用同一块内存空间,因此只能同时访问其中一个成员,访问共用体成员使用`.`运算符或`->`运算符,例如:

 

```c

union Data data1;

data1.ch = 'A';

 

printf("char类型成员:%c\n", data1.ch);

printf("int类型成员:%d\n", data1.num);

printf("float类型成员:%f\n", data1.f);

```

 

由于共用体的所有成员占用的是同一块内存空间,因此赋值给一个成员后,其他成员的值都将被改变。

 

4. 共用体作为函数参数

 

共用体可以作为函数的参数传递,例如:

 

```c

void printData(union Data data) {

    printf("char类型成员:%c\n", data.ch);

    printf("int类型成员:%d\n", data.num);

    printf("float类型成员:%f\n", data.f);

}

```

 

或者使用共用体指针作为函数参数:

 

```c

void printData(union Data *pData) {

    printf("char类型成员:%c\n", pData->ch);

    printf("int类型成员:%d\n", pData->num);

    printf("float类型成员:%f\n", pData->f);

}

```

 

5. 共用体和结构体的区别

 

共用体和结构体都可以定义自定义的数据类型,但它们的使用方式和内存分配方式不同:

 

- 结构体的各个成员占用不同的内存空间,大小等于各个成员大小之和,可以同时访问结构体的多个成员。

- 共用体中各个成员占用同一块内存空间,大小等于最大成员的大小。共用体的各个成员都指向同一块内存,只能同时使用一个成员。