C中联合体union共用内存

一种特殊的数据类型,允许您在相同的内存位置存储不同的数据类型。您可以定义一个带有多成员的共用体,但是任何时候只能有一个成员带有值。

union变量的大小为其中size最大类型的大小。

#include<stdio.h>

union U
{
    int a;
    char b;
};

int main()
{
    union U x;
    printf("%d\n", sizeof(x)); // 4

    x.a = 97 + (98 << 0xf);  // a的assic码是97
    //x.b = ‘b‘;   // x.a 会被改

    printf("%d %c\n", x.a, x.b);  // x.b = ‘a‘, 因为最后一个字节值为97

    return 0;
}

参考链接:https://blog.csdn.net/u010585135/article/details/45172765

原文地址:https://www.cnblogs.com/lfri/p/12420129.html

时间: 2024-10-21 10:54:03

C中联合体union共用内存的相关文章

C语言union(联合体、共用体)及应用

C语言union(联合体.共用体)及应用 在结构体(变量)中,结构的各成员顺序排列存储,每个成员都有自己独立的存储位置.联合(union)变量的所有成员共享同片存储区/内存.因此联合变量每个时刻里只能保存它的某一个成员的值. 联合变量也可以在定义时直接初始化,但这个初始化只能对第一个成员进行.例如下面的描述定义了一个联合变量,并进行了初始化. 1 uunion data 2 { 3 char n; 4 float f; 5 }; 6 union data u1 = {3}; //只有u1.n被初

[C++] Union共用体示例讲解

/* * UnionLab.cpp * * Created on: Nov 29, 2014 * Author: sodino */ #include <iostream> using namespace std; /** * "共用体"是一种特殊的类,在一个"共用体"内可以定义多种不同的数据类型. * 一个被声明为该"共用体"类型的变量中,允许装入该"共用体"所定义的任何一种类型的数据, * 这些不同类型的数据共

联合体union的详解

1.概述 联合体union的定义方式与结构体一样,但是二者有根本区别. 在结构中各成员有各自的内存空间,一个结构变量的总长度是各成员长度之和.而在"联合"中,各成员共享一段内存空间,一个联合变量的长度等于各成员中最长的长度. 2.联合体长度 在The C Programming Language里面讲述union内存分配的原话是 1)联合体就是一个结构 2)联合体的所有成员相对于基地址的偏移量为0 3)此结构空间要大到总够容纳最"宽"的成员 4)并且,其对其方式要适

联合体union用在何处?

程序设计刚開始学习的人在学习时,总想问:"这个东东有什么用?"于是,在建设有关的教学资源时,也便总从这个角度,试图给出一些案例.这是一个将刚開始学习的人作为教学目标人群的人该干的事. 然而,在准备这样一些案例时,诸如循环.数组.结构体之类的,能够编出一堆堆的能体现实际应用的案例,或出例题,或出实践题目,都好说.然而.对于有些在教科书中的"小知识点",作为讲程序设计语言,有些老师都选择不讲的,能却总是不易编出. 基本的原因,是这些内容要解决的问题.似乎并不常见.针对特

Boost--variant (C++中的union)

union联合体类型的问题 只能用于内部类型,这使得union在C++中几乎没有用 所以boost提供了variant,相当于是C++中的union #include "boost/variant.hpp" #include <vector> #include <iostream> #include <array> #include <string> using namespace std; class DoubleVisitor : p

Android中Handler引起的内存泄露

在Android常用编程中,Handler在进行异步操作并处理返回结果时经常被使用.通常我们的代码会这样实现. 但是,其实上面的代码可能导致内存泄露,当你使用Android lint工具的话,会得到这样的警告 In Android, Handler classes should be static or leaks might occur, Messages enqueued on the application thread’s MessageQueue also retain their t

Android中使用Handler造成内存泄露的分析和解决

什么是内存泄露? Java使用有向图机制,通过GC自动检查内存中的对象(什么时候检查由虚拟机决定),如果GC发现一个或一组对象为不可到达状态,则将该对象从内存中回收.也就是说,一个对象不被任何引用所指向,则该对象会在被GC发现的时候被回收:另外,如果一组对象中只包含互相的引用,而没有来自它们外部的引用(例如有两个对象A和B互相持有引用,但没有任何外部对象持有指向A或B的引用),这仍然属于不可到达,同样会被GC回收. Android中使用Handler造成内存泄露的原因 Handler mHand

在java中如何创建一个内存泄露

今天访问java 并发编程网,看到一个翻译征集令,并发编程网的作者从stackoverflow 网站上选取了一些经典问答,遂决定翻译几篇 征集令地址:http://ifeve.com/stackoverflow-assembly/ 翻译系列文章: 1.Java 核心类库中的一些设计模式 2. hashMap 与hashTable之间的区别 3.  在java中如何创建一个内存泄露 译文: 在java中如何创建一个内存泄露 问题: 我之前参加了一个面试, 被问到在java中如何创建一个内存泄露.不

Linux中查看进程占用内存和系统资源情况的命令

用 'top -i' 看看有多少进程处于 Running 状态,可能系统存在内存或 I/O 瓶颈,用 free 看看系统内存使用情况,swap 是否被占用很多,用 iostat 看看 I/O 负载情况... 还有一种办法是 ps -ef | sort -k7 ,将进程按运行时间排序,看哪个进程消耗的cpu时间最多. top: 主要参数 d:指定更新的间隔,以秒计算. q:没有任何延迟的更新.如果使用者有超级用户,则top命令将会以最高的优先序执行. c:显示进程完整的路径与名称. S:累积模式,