//共用体  union
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h> // union 共用体,构造数据类型,也叫联合体,用途:十几个不同类型的变量共占一段内存(相互覆盖) //共用体在类型定义的时候并不分配内存,定义共用体变量的时候才分配内存
union data{
char c;
int a[];
}udat1; union stu{
int a;//内部变量无法初始化,因为类型定义不会分配内存
char name[];
}fisr, *fisr1, fisr2[];//共用体定义形式①
//注意:在定义共用体变量的时候初始化也只能初始化第一个成员变量,无法对其他成员变量初始化 //匿名公共体--匿名共用体无法定义变量,只能在初始化的时候定义变量
//这样就限定了共用体变量的个数,一般用于给某些特殊权限的人使用的变量
union {
char c;
int a[];
}lastp; struct tes{
int num;
char name[];
}tes1 = {,"feiyu"},tes2; //共用体变量占据的内存单元的个数应大于或者等于是其内部最大数据成员占据内存单元数。
//结构体,共用体在内存中存储,字节对齐
//data是共用体,共用体大小必须至少包含最大的成员数据,所以其原始大小是sizeof(int)*10 = 40字节,
//union {
// char c;
// int a[10];
//};
//因为data其原始大小正好是最宽基本类型成员int的倍数,不用填充字节
//所以共用体data的大小是40 //stu是共用体,stu的原始大小是sizeof(char)*10字节,根据字节对齐原则,最宽基本类型成员是int,需要填充字节
//所以共用体stu的大小是12 //总结:共用体大小必须至少包含最大的成员数据,并且可以整除最宽基本类型成员--详情见结构体
void main(){
//验证共用体的字节对齐原则
printf("验证共用体的字节对齐原则--%d\n", sizeof(udat1));
printf("验证共用体的字节对齐原则--%d\n", sizeof(fisr));
//定义共用体
union stu stuinfo;//共用体定义形式②
//共用体的赋值
stuinfo.a = ;
//共用体变量任何时候只有一个成员存在,当存在一个成员,却给给其他成员赋值的时候,后面会覆盖前面
//因为共用体是共占一段内存,不会给每个成员变量都分配一块内存
strcpy(stuinfo.name, "联想");
printf("共用体成员变量a=%d;name=%s\n", stuinfo.a, stuinfo.name);
//结果发现成员变量a被覆盖了
union stu stuinfo2 = stuinfo;//共用体变量可以直接赋值
printf("共用体成员变量a=%d;name=%s\n", stuinfo2.a, stuinfo2.name);
tes2 = tes1;//结构体变量可以直接赋值
printf("结构体成员变量num=%d,name=%s\n", tes2.num, tes2.name);
system("pause");
}

C语言 共用体的更多相关文章

  1. C语言共用体、大小端、枚举

    1.共用体和结构体的相同和不同 (1)相同点就是操作语法几乎相同.(2)不同点是本质上的不同.struct是多个独立元素(内存空间)打包在一起:union是一个元素(内存空间)的多种不同解析方式. # ...

  2. C语言共用体(Union)

    通过前面的讲解,我们知道结构体(Struct)是一种构造类型或复杂类型,它可以包含多个类型不同的成员.在C语言中,还有另外一种和结构体非常类似的语法,叫做共用体(Union),它的定义格式为: uni ...

  3. C语言共用体union

    union共用体说明: 当一个共用体被声明时, 编译程序自动地产生一个变量, 其长度为联合中最大的变量长度的整数倍. 比如union中有{int x; double x1; char name[10] ...

  4. 瘋子C语言笔记(结构体/共用体/枚举篇)

    (一)结构体类型 1.简介: 例: struct date { int month; int day; int year; }; struct student { int num; char name ...

  5. C语言之共用体

    最近在复习C语言,特再次记录: 有时需要将几种不同类型的变量存放到同一段内存单元中.如一个int.float.char放在同一个地址开始的内存单元中.,也就是使用覆盖技术,几个变量相互覆盖,称之为共用 ...

  6. 不可或缺 Windows Native (8) - C 语言: 结构体,共用体,枚举,类型定义符

    [源码下载] 不可或缺 Windows Native (8) - C 语言: 结构体,共用体,枚举,类型定义符 作者:webabcd 介绍不可或缺 Windows Native 之 C 语言 结构体 ...

  7. 全国计算机等级考试二级教程-C语言程序设计_第14章_结构体、共用体和用户定义类型

    函数的返回值是结构体类型 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> struct ...

  8. (C语言)共用体union的使用方法举例

    曾经在学校学习C语言的时候一直搞不懂那个共用体union有什么用的.工作之后才发现它的一些妙用,现举比例如以下: 1. 为了方便看懂代码. 比方说想写一个3 * 3的矩阵,能够这样写: [ 注:以下用 ...

  9. C语言高级-结构,共用体,文件,链表

    C语言结构 标准声明方式 struct student{        int age;        char sex;    }; 这个可以在main函数中定义:  struct student ...

随机推荐

  1. 如何写BaseDomain

    上图摘自<Spring3.x企业应用开发实战> 提到了使用org.apache.commons.lang3.builder ToStringBuilder进行toString方法的统一. ...

  2. 敏捷开发中高质量 Java 代码开发实践

    Java 项目开发过程中,由于开发人员的经验.代码风格各不相同,以及缺乏统一的标准和管理流程,往往导致整个项目的代码质量较差,难于维护,需要较大的测试投入 和周期等问题. 这些问题在一个项目组初建.需 ...

  3. java中使用split分割字符串一个有趣的现象

    最近在项目中,发现了一个bug,充分了展示了自己对java底层的认知有很多的不足和欠缺. 下面有段代码: String str="1#2#3"; String[] strs=str ...

  4. 修复 Java 内存模型,第 1 部分——Brian Goetz

    转自Java并发大师Brain Goetz:http://www.ibm.com/developerworks/cn/java/j-jtp02244/ (中文地址) http://www.ibm.co ...

  5. 集线器hub、交换机switch、路由器router 的区别

    原文链接:http://blog.csdn.net/thq0201/article/details/7782319 首先说HUB,也就是集线器.它的作用可以简单的理解为将一些机器连接起来组成一个局域网 ...

  6. 集算器协助java处理多样性数据源之MongoDB

    MongoDB不支持join,其官网上推荐的unity jdbc可以把数据取出来进行二次计算实现join运算,但这些join.group.函数.表达式等高级功能都是收费版才有,而且即使是收费版本,对子 ...

  7. Swing应用开发实战系列之二:设计日期选择面板窗口

    Swing本身没有提供什么华丽丽的日期时间选择控件,所以笔者就在网上搜了个第三方的jar包jdatepicker-1.3.2.jar,基于此设计了个很轻量的日期选择面板,很简单的.效果图如下所示: 代 ...

  8. jquery parent和parents,children和find

    parent返回匹配元素的父元素的元素集合:parents返回匹配元素的祖先元素的元素集合. children返回匹配元素的子元素的元素集合:find返回匹配元素的后代元素的元素集合.

  9. Ubuntu安装Eclips for C/C++及相关配置

    1,安装JDK: sudo apt-get install aptitude sudo aptitude search openjava sudo aptitude install openjdk-7 ...

  10. Reverse Bits

    Reverse bits of a given 32 bits unsigned integer. For example, given input 43261596 (represented in ...