//共用体  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. iOS开发之NSTimer使用初探

    创建一个定时器(NSTimer) - (void)viewDidLoad { [super viewDidLoad]; [NSTimer scheduledTimerWithTimeInterval: ...

  2. java 接口(interface)

    接口定义:[修饰符] interface 接口名 extends 父接口名1,父接口名2 ...{ } 接口可以说是一种特殊的抽象类.接口只能定义方法,而不能实现方法的实例. 1.接口中能够定义抽象方 ...

  3. LeetCode 6 ZigZag Conversion(规律)

    题目来源:https://leetcode.com/problems/zigzag-conversion/ The string "PAYPALISHIRING" is writt ...

  4. Eclipse启动报错:An internal error occurred during: "Initializing Java Tooling".

    An internal error occurred during: "Initializing Java Tooling".java.lang.NullPointerExcept ...

  5. mac下 home-brew安装及php,nginx环境安装及配置

    Homebrew官网 http://brew.sh/index_zh-cn.html Homebrew是神马 linux系统有个让人蛋疼的通病,软件包依赖,好在当前主流的两大发行版本都自带了解决方案, ...

  6. jQuery Form 表单提交插件-----formSerialize,fieldSerialize,fieldValue,resetForm,clearForm,clearFields的 应用

    一.jQuery Form的其他api  1.  formSerialize 将表单序列化成查询串.这个方法将返回一个形如: name1=value1&name2=value2的字符串.是否可 ...

  7. C语言的函数

    "函数"在英文的翻译是"function",无论在自然科学还是计算机科学都是这个词,而"function"的本意是"功能" ...

  8. C语言流程控制

    顺序结构 顺序结构是最常用的结构,即从上到下的执行语句. int num=5; num++; num=13; 条件结构 条件结构是当表达式为真的时候执行语句块,C语言提供了两种条件结构 if...el ...

  9. MFC 窗口分割

    动态分割窗口: BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext) { , , CSize(, ...

  10. Java基础の乱弹琴一:assert关键字

    一.概述 assert:表示断言 二.语法 在Java中,assert关键字是从JAVA SE 1.4 引入的,为了避免和老版本的Java代码中使用了assert关键字导致错误,Java在执行的时候默 ...