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. Java Web相关概念调查

  2. Unity项目中的资源管理

    这是我在2017金山技术开放日分享的部分内容.从贴图资源格式配置的介绍开始,引申出资源配置工具,最后再谈谈一整套项目资源管理方案.在GitHub上可以获取到资源配置工具的代码,是基于下面理念的一份简单 ...

  3. 关于urls 的基础

    1 普通正则 2 分组正则 url(r'/blog/(\d+)/(\d+)',views.blog)     blog(request,arq1,arq2) 按照位置传参 3 分组命名 url(r'/ ...

  4. array_multisort

    项目中用到这个函数了 ,起初对这个函数一直是懵逼状态,文档都看的朦朦胧胧的 网上无意间看到这篇文章 ,写的超级详细,收藏了 . 当然要先放原地址:https://www.cnblogs.com/WuN ...

  5. mod_fcgid: HTTP request length 136136 (so far) exceeds MaxRequestLen (131072)

    原来是fastcgi模式下的设置问题,需要在配置文件.htaccess或者直接在apache的配置文件http.conf 中指明,如下: 查看官方说明有这么一句:Default: FcgidMaxRe ...

  6. 2019-03-06-day012-生成器与推导式

    01 昨日回顾 迭代器: 迭代器有iter方法 next方法就是迭代器 递归: 自己调用自己 明确的结束条件 递归的最大深度 官方 1000 实际测试:998/997 import sys sys.s ...

  7. c# GetType()和typeof()的区别

    c#   GetType()和typeof()的区别 C#中任何对象都具有GetType()方法,返回Type类型的当前对象的类型. GetType()是基类System.Object的方法,因此只有 ...

  8. [工作日志] 2018-11-21 主要: 改bug 自测 :校验图片后缀名

    正则表达式 用以下方式去校验图片的后缀 String reg = ".+(.JPEG|.jpeg|.JPG|.jpg)$";String imgp= "Redocn_20 ...

  9. React-Native 上拉加载下拉刷新

    react-native 上下拉加载的控件效果都不好,找了半天没找到,正打算自已封装的时候,无意中找到了一个比较好的控件,大家看一下: react-native-refresh-list-view 这 ...

  10. win7 + nginx + php

    1. 下载 Nginx的下载地址:http://www.nginx.org/ PHP的下载地址:http://www.php.NET/downloads.php win7 64  +  php-5.4 ...