IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> C语言共用体 -> 正文阅读

[C++知识库]C语言共用体

上一篇文章:动态数组的实现,结合指针与结构体实现链表,以及链表相关操作

共用体

共用体可以将不同数据类型的值放在同一个内存空间中,现实在一个存储区根据程序执行的不同需求读写不同类型的数据。

共用体类型的定义

union 共用体类型名{
	成员列表;
};    //最后的分号不可少

共用体变量的定义
三种不同的形式定义共用体变量:
(一)先定义共用体类型,再定义该类型的变量,格式union 共用体类型名 共用体变量;

union uni {
	int a;
	double b;
};
	union uni u1, u2, u3;     //定义共用体变量u1、u2、u3
	//定义共用体变量的时候,关键字union不可少,共用体类型的名字uni也不可少

(二)共用体类型和该共用体类型的变量同时定义

union uni {
	int a;
	double b;
}u1, u2, u3;       //定义共用体类型的同时定义共用体变量u1、u2、u3

(三)同时定义,但省略共用体类型的名字

union {
	int a;
	double b;
}u1, u2, u3;

共用体变量的引用
和结构体变量的引用一样,通过点.来引用其成员变量。

#include <stdio.h>
union un {
	int a;
	float b;
};
int main(){
	union un a; //定义一个结构体变量
	a.a = 666;
	a.b = 3.14;   //共用体会共用同一个内存空间,所以每赋值一次都会把上一次的值覆盖掉
	printf("%f\n",a.b);
	return 0;
}

运行结果为:
在这里插入图片描述

共用体的特点

  • 所有成员共用一块内存空间,其首地址相同。共用体变量与其各成员变量的内存地址相同。共用体变量所占内存大小为成员当中占内存最大的那个变量的大小。
#include <stdio.h>
typedef union un {      //用typedef给共用体定义一个别名
        int a;
        float b;
        double c;
}UN;      //UN是共用体的别名
int main(){
        UN a;      //利用别名定义共用体变量
        printf("%d",sizeof(UN));     //sizeof求其所占的内存为多少个字节
        return 0;
}

运行结果为:8,既8个字节,也就是成员当中占内存最大的double类型的大小。

  • 不能对共用体变量进行初始化,也不能将共用体变量作为函数的参数,以及不能使函数返回一个共用数据,但可以使用指向共用体变量的指针。
  • 共用体当中可以有结构体,结构体当中也可以共用体。

学生成绩分级
处理一个学生的成绩,可以是百分制的,也可以是A~E六个等级

#include <stdio.h>
union score{
        int cj;
        char dj;
};
typedef struct student{
        int no;
        char name[10];
        union score sco;
}STU;
int main(){
        STU s;
        int opt;
        printf("Please input no, name\n");
        scanf("%d%s",&s.no, s.name);
        printf("Please select:\nOption 1:0~100 score\nOption 2:A~E score\n");
        scanf("%d",&opt);
        if(opt == 1){
                printf("input score:(0~100)\n");
                scanf("%d",&s.sco.cj);
                printf("The data is:\n");
                printf("%d      %s      %d      \n",s.no, s.name, s.sco.cj);
        }
        else if(opt == 2){
                printf("please input score (A~E)\n");
                getchar();
                scanf("%c",&s.sco.dj);
                printf("The data is:\n");
                printf("%d      %s      %c      \n",s.no, s.name, s.sco.dj);
        }
        return 0;
}

运行:
在这里插入图片描述
在这里插入图片描述


查看长整型数据的高、低位

#include <stdio.h>
union un {
        long a;
        struct {
                unsigned short low;
                unsigned short high;
        }b;
};
int main(){
        union un u;
        long x;
        scanf("%ld",&x);
        u.a = x;
        printf("High: %d        low: %d\n",u.b.high, u.b.low);
        return 0;
}

运行:
在这里插入图片描述
在这里插入图片描述
高、低位要分别转换成二进制才能看出来。上面的代码是分别将高位和低位二进制数转换成十进制数后再输出。

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-07-11 16:27:42  更:2021-07-11 16:27:55 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/4 17:04:14-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码