首页 > 其他分享 >C 语言 共用体操作

C 语言 共用体操作

时间:2023-04-22 09:45:16浏览次数:37  
标签:ch 语言 union 成员 内存空间 printf 共用 操作

在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. 共用体和结构体的区别

 

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

 

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

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

标签:ch,语言,union,成员,内存空间,printf,共用,操作
From: https://www.cnblogs.com/full-stack-linux-new/p/17342482.html

相关文章

  • C 语言各个数据类型的输入输出
    -1.整型(int)的输入输出: 输入: ```cintnum;printf("请输入一个整数:\n");scanf("%d",&num);//注意取地址符&``` 输出: ```cintnum=123;printf("这个数字是%d。\n",num);``` 2.浮点型(float和double)的输入输出: 输入: ```cfloatnum1;doubl......
  • 机器学习--数据操作初试
    #加载数据集,返回字典类型的数据sklearn.datasets.load_iris()数据示例iris=sklearn.datasets.load_iris()#数据集特征值iris['data']#数据集标签值iris['target']特征和标签相对应数据集的划分由于数据集在某些情况下是很珍贵的,并且在训练后需要对模型性能进行验......
  • 2023-04-21:用go语言重写ffmpeg的metadata.c示例。
    2023-04-21:用go语言重写ffmpeg的metadata.c示例。答案2023-04-21:这段Go代码演示了如何使用ffmpeg-go库中的函数来读取多媒体文件元数据,包括视频、音频等信息。它的大体过程如下:设置环境变量以加载FFmpeg动态链接库这里将FFmpeg库中的各个动态链接库路径添加到环境变......
  • Docker镜像操作
    Docker保存镜像1.保存容器更改将容器修改的内容保存为镜像dockercommitappdocker在提交容器更改时可以附加提交信息,方便查询dockercommit-m"firstinitapp"2.镜像命名通过dockertag命令可以对未命名的镜像命名,也可以修改已有镜像的命名dockertag容器idapp:1......
  • 05 基础的数据操作
    05基础的数据操作在创建了数据库和数据库表之后,我们就可以在表中进行数据操作了。基础操作分为添加删除修改查询以上4种操作又简称为CURD(Create,Update,Retrieve,Delete)一.添加数据插入数据的类型:添加一行中所有列对应的数据,不写列名添加一行中某些列对应的......
  • Hadoop操作
    基本命令启动Hadoopstart-dfs.sh确保ssh服务打开了,否则启动不成功打开ssh服务:sudo/usr/sbin/sshd创建文件夹hadoopfs-mkdir路径forexample!hadoopfs-mkdir/HomeWork就会在根目录创建一个HomeWork文件夹 上传文件hadoopfs-put文件名服务器端文件夹名For......
  • 阿里云ECS linux操作系统 tomcat域名配置SSL
    阿里云ECS linux操作系统 tomcat域名配置SSL启用域名https1、解压已保存到本地的Tomcat证书文件。解压后您将看到文件夹中有以下文件:证书文件(domain_name.pfx)密码文件(pfx-password.txt) 说明本文中证书名称以domain_name为示例。每次下载证书都会产生新的密码。......
  • 学习《操作系统导论》02
    机制:受限直接执行(原书第六章)时分共享技术带来的两个挑战性能问题即:在不增加系统开销的情况下实现虚拟化控制权问题,如何有效的运行进程同时保留对CPU的控制因此这里的目标就是:操作系统必须以高性能的方式虚拟化CPU,同时保持对系统的控制基本技巧:受限直接执行前面介绍过,操......
  • Django框架——静态文件配置、form表单、request对象、连接数据库、ORM简介、ORM基本
    配置文件介绍SECRET_KEY='0yge9t5m9&%=of**qk2m9z^7-gp2db)g!*5dzb136ys0#)*%*a'#盐DEBUG=True#调试模式,等项目上线的时候,改成False#配置数据库DATABASES={'default':{'ENGINE':'django.db.backends.sqlite3',#默认是自......
  • 编程打卡:C语言趣味编程习题做
    编程打卡:C语言趣味编程习题做完数问题描述完数是因子相加等于它本身的数字,求一个范围内的完数。设计思路遍历这个范围内的数字,求它的因子,然后判断是否为完数即可。流程图graphA[开始]-->B[inputN,i=2]-->C{i<=N}--Yes-->D[j=1,sum=0]-->E{j<=i/2}--Yes-->F{i%j==0}--Yes--......