C 联合体

联合体和结构体最大的区别是:

结构体各个成员都有自己的内存空间

联合体所有的成员共用同一个内存空间,空间的大小取决于所有成员中占用内存空间最大的那个。

放一段代码:

#include <stdio.h>
#include <stdlib.h>
typedef union _m
{
    int c;
    char name[20];
}M;
int main()
{
    system("color 2E");
    printf("联合体 M 占用的内存大小 : %d\n" , sizeof(M));
    return 0;
}

其结果为:

实际上可以这么理解 : union在同一时间只能使用其所有成员中的一个成员。

如果使用union , 赋值一个成员 , 因为union中所有的成员都使用同一块内存空间 , 实际上其他成员的内存内容也改了 , 再去使用其他成员的话,值都是乱七八糟的。

时间: 2024-12-18 20:01:44

C 联合体的相关文章

结构体/联合体 所占用内存

1 #include "stdafx.h" 2 #include <iostream> 3 using namespace std; 4 5 typedef struct Parameter{ 6 int a; 7 long b; 8 double c; 9 int d; 10 }Parameter; 11 12 typedef union Para{ 13 unsigned a; 14 double b; 15 long c; 16 int d; 17 }Para; 18

结构体,联合体,内存分配

#include<stdio.h> struct a{ char x[6]; int y; char z[6]; }; struct b{ int y; char x[6]; char z[6]; }; union c{ char x[6]; int y; char z[6]; }; int main() { printf("%d,%d,%d\n",sizeof(struct a),sizeof(struct b),sizeof(union c)); return 0; }

数组、结构体、联合体、枚举类型、类型转换

1.数组 int num[2] = { 1, 2 };//1×2,num[0]=1 int num[2][2] = { { 00, 01 }, { 10, 11 } };//2×2,num[1][1]=11 int num[2][2][2] = { {{000,001},{010,011}}, {{100,101},{110,111}} };//2个2×2数组,num[1][1][1]=111 2.结构体 #include <stdio.h> int main() { struct Famil

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

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

C的联合体和结构体区别

联合体与结构体是很容易混淆的概念.粗略一看,两者无论声明.定义还是定义对象的方式都很相似.然而这两个东西的概念和作用实际千差万别.首先,联合体的各个成员共用内存,并应该同时只能有一个成员得到这块内存的使用权(即对内存的读写),而结构体各个成员各自拥有内存,各自使用互不干涉.所以,某种意义上来说,联合体比结构体节约内存.举个例子:typedef struct{ int i; int j;}A;typedef union{ int i; double j;}U;sizeof(A)的值是8,sizeo

20160402_[转]联合体(union)的使用方法及其本质

原文:http://blog.csdn.net/huqinwei987/article/details/23597091 1.联合体union的基本特性——和struct的同与不同 union,中文名“联合体.共用体”,在某种程度上类似结构体struct的一种数据结构,共用体(union)和结构体(struct)同样可以包含很多种数据类型和变量. 不过区别也挺明显: 结构体(struct)中所有变量是“共存”的——优点是“有容乃大”,全面:缺点是struct内存空间的分配是粗放的,不管用不用,全

联合体以及如何调出内存窗口

联合体相关: 其实联合体这块儿基本上跟struct用法是相同的,只不过联合体这里公用一块内存. 为了合理演示其所有内容,需要调用一个内存窗口.这个在查找的时候还是费了一些功夫的.来分享一下. 这样直接执行根本看不到具体的执行过程. 可是怎么才能看到 他们共用一块内存呢? //从当前窗口是没有办法查看内存的,程序一定要跑起来~才能查看.可是 跑到一半怎么才能查看呢!?~所以在 vs2010及以上版本,调用内存窗口很大的前提就是,为你正在进行的程序设置断点: 如下图: 然后运行程序. 进入当前界面.

利用联合体通过串口收发浮点数

以下介绍两种方法,一种是利用指针,一种是利用联合体,时间宝贵的看客可以直接跳到第二种方法 这里只是讨论数据发送前和接收后的处理,不讨论具体发送过程 方法一:指针 UART串口有一个缺点,就是发送和接受是一个字节一个字节的接收,如果发送的浮点数那可怎么办啊? 有人会说,那就一个字节一个字节发送啊 那么,我先定义一个double data 32位机中,一个double类型占8个字节,也就是说 data需要拆分8块通过UART发送 how? 学习c语言的时候,你肯定读过这句话:指针是c语言的精髓 那就

C++中联合体(union)的使用

1 typedef union para 2 { 3 double tmp[10]; 4 struct 5 { 6 double a; 7 double b; 8 double c; 9 double d; 10 }NP; 11 }NPara; 12 //或者如下所示 13 union para 14 { 15 double tmp[10]; 16 struct 17 { 18 double a; 19 double b; 20 double c; 21 double d; 22 }NP; 23