union共用体名

{

  类型名 成员名1;

  类型名 成员名2;

  ……

  类型名 成员名n;

}

  由于各个成员变量在内存中都使用同一段存储空间,因此共用体变量的长度等于最长的成员长度,共用体的访问方式和结构体类似。

  下面是一个用共用体的程序,推断一下这个程序的输出是什么:

 #include <stdio.h>

 int main()
{
union key{
int k;
char ch[];
}u; u.k = ;
printf("%d %d\n", u.ch[], u.ch[]);  
return ;
}

正确的输出是:,你做对了吗?

一开始我以为输出结果是: 1  2,因为258的二进制表示为:0000 0001 0000 0010,这两个字节分别为1 和 2

后来我又认为答案是:0 0, 因为258完整的4字节二进制表示是:0000 0000 0000 0000 0000 0001 0000 0010前两个字节值为0,这里的错误就是ch应该是从低字节开始存的,所以占用的应该是int的两个低字节空间,但是前面的把258的4字节完整展开的形式就让我误以为这就是258在内存中的存储形式,认为前面两个字节就是低字节,从而误以为ch是占用的是前面两个值为0的字节,但是,但是这种展开式其实是高字节在前,低字节在后,所以258在内存中实际的存储形式是,所以低字节是02 和01,所以ch[0] 应该等于02, ch[1] 应该等于01,于是得到了这样的输出。

共用体union的更多相关文章

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

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

  2. C语言共用体union

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

  3. 共用体 union

    共用体是一种数据格式,能够存储不同的数据类型,但只能同时存储其中的一种类型. union one4all { int int_val; double double_val; long long_val ...

  4. C结构体struct 和 共用体union的使用测试

    #include <stdio.h> struct { char name[10]; char sex; char job; int num; union{ //联合只能共用同一个内存 i ...

  5. 以位为单位存储标志-共用体-union

    一.程序的结构如下: typedef union _KEYST     {         struct         {             uint8 Key1_Flag :1;//表示第0 ...

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

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

  7. C++结构、共用体、枚举

    一.结构 结构是C++OOP的基石.学习有关结构的知识僵尸我们离C++的核心OOP更近. 结构是用户定义的类型,同一个结构可以存储多种类型数据,这使得将一个事物的不同属性构成一个对象成为了可能.另外C ...

  8. C语言 共用体

    //共用体 union #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> #includ ...

  9. 5、数组&字符串&结构体&共用体&枚举

    程序中内存从哪里来 三种内存来源:栈(stack).堆(heap).数据区(.date): 栈(stack) 运行自动分配.自动回收,不需要程序员手工干预: 栈内存可以反复使用: 栈反复使用后,程序不 ...

随机推荐

  1. 全局css , 样式设置, css 初始化. css ,style ,全局样式, 初始化样式

    全局CSS设置总结 1.清除所有标记的内外边距 html, body, ul, li, ol, dl, dd, dt, p, h1, h2, h3, h4, h5, h6, form, fieldse ...

  2. centos6.6安装hadoop-2.5.0(四、hadoop HA安装)

    操作系统:centos6.6 环境:selinux disabled:iptables off:java 1.8.0_131 安装包:hadoop-2.5.0.tar.gz HA模式下的HADOOP完 ...

  3. Python中读取文件中的json串,并将其写入到Excel表格中

    Json:JavaScript Objective Notation,是一种轻量级的数据交换格式.Json最广泛的应用是作为AJAX中web服务器和客户端的通讯的数据格式.现在也常用语http请求中, ...

  4. DOM树中节点与节点之间的关系图

    获取子代元素节点:children 获取所有子代元素节点数:**.childElementCount  或者  **.children.length

  5. 2017ICPC南宁赛区网络赛 Overlapping Rectangles(重叠矩阵面积和=离散化模板)

    There are nnn rectangles on the plane. The problem is to find the area of the union of these rectang ...

  6. Github笔记(1)

    学习目的: 借助GitHub托管项目代码 GitHub官方介绍: 中文:http://www.cnblogs.com/twtp/articles/5264073.html 英文:https://gui ...

  7. 【leetcode】53-MaximumSubarray

    problem MaximumSubarray code class Solution { public: int maxSubArray(vector<int>& nums) { ...

  8. [LeetCode&Python] Problem 404. Sum of Left Leaves

    Find the sum of all left leaves in a given binary tree. Example: 3 / \ 9 20 / \ 15 7 There are two l ...

  9. python 加密 hashlib与hmac模块

    https://www.jb51.net/article/128911.htm hashlib模块简介: hashlib模块为不同的安全哈希/安全散列(Secure Hash Algorithm)和 ...

  10. vim 的编辑模式 命令模式

    1.vim的编辑模式    进入编辑模式 按键: a  i  o a: 表示在光标当前的,后面开始插入,写数据 i : 则表示 前面 . o : 表面在光标当前的,下一行开始写入数据. O : 大写的 ...