今天一个读者朋友给我发的一段代码,这段代码让他有了疑惑。

代码如下:

#include "stdio.h"
int main()
{typedef union{short i;char j[2];}DATA;DATA a;a.j[0] = 10;a.j[1] = 1;printf("%x\n",a.i);return 0;
}

他的几个测试代码以及输出

这里说一个问题,我们从printf上看到的不一定我们想看到的,所以我们需要去变量的内存地址一探究竟,一定要了解内存的布局,对内存有所了解。

上面注释的代码,在我的电脑中运行的结果不相同,所以要看printf的准确输出,应该初始化变量a

使用gdb来查看地址,可以准确看到变量内存中的数据。

什么是大小端?

这个问题在之前的文章说过,这里再重新提一下

  • 大端模式(Big-endian),是指数据的高字节,保存在内存的低地址中,而数据的低字节,保存在内存的高地址中

  • 小端模式(Little-endian),是指数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中

我们用这个再来看看我们的程序

#include "stdio.h"
int main()
{typedef union{short i;char j[2];}DATA;DATA a;//a.j[0] = 10;a.j[1] = 1;printf("%x\n",a.i);return 0;
}

j[0]在低地址,j[1]在高地址,这个没有什么意见吧?

内存就是一个尺子????,它是不断变长的,所以这个地址也是慢慢变大的,没有任何问题吧。

然后,我们可以看看现在的输出,从上面的输出可以看到输出100,也就是j[1]在高地址,j[0]在低地址,那这个计算机就是小端模式

也可以通过查看内存地址来确认

相关文章

计算机验证大小端


推荐阅读:

专辑|Linux文章汇总

专辑|程序人生

专辑|C语言

我的知识小密圈

关注公众号,后台回复「1024」获取学习资料网盘链接。

欢迎点赞,关注,转发,在看,您的每一次鼓励,我都将铭记于心~

嵌入式Linux

微信扫描二维码,关注我的公众号

C语言,使用union了解内存相关推荐

  1. c语言字母是怎么存储,C语言之数据在内存中的存储

    C语言之数据在内存中的存储 在我们学习此之前,我们先来回忆一下C语言中都有哪些数据类型呢? 首先我们来看看C语言中的基本的内置类型: char //字符数据类型 short //短整型 int //整 ...

  2. C语言-联合体union

    目录: 一.union的定义说明使用 1.union的定义 2.union的说明 3.union的使用 二.联合体union的基本特性--和struct的同与不同 三.双刃剑--多种访问内存途径共存 ...

  3. union在c语言中的作用,c语言联合union的使用用途

    在使用联合的使用,我们通常用来判断大小端,但是其实不仅仅有这个用处. 我在网上看到还有其他的用途: 1.分离高低字节 这个需要结合cpu大小端来判断,原文如下: 这样的操作,而一个除法消耗四个机器周期 ...

  4. C语言之union共同体

    C语言之union共同体 文章链接 知识点 union共同体的定义: union空间长度的分配: 共同体个变量相互影响及原因: union的使用样例: 新名词记录{union共同体:Unicode:} ...

  5. C 语言编程 — 堆栈与内存管理

    目录 文章目录 目录 前文列表 栈(Stack)和堆(Heap) 栈 堆 内存管理 动态分配内存 重新调整内存的大小和释放内存 malloc 函数详解 memset 初始化内存数据 前文列表 < ...

  6. 21.C 语言与 C++在内存分配有什么区别?

    C 语言与 C++在内存分配有什么区别? 在C语言中通过malloc和free来分配.释放内存空间:在C++语言中通过new和delete来分配和释放内存空间. malloc/free和new/del ...

  7. 内存编程 c语言 c,C语言编程入门之内存管理

    本篇教程探讨了C语言编程入门之内存管理,希望阅读本篇文章以后大家有所收获,帮助大家对相关内容的理解更加深入. < 自动变量与静态变量 auto自动变量 auto是默认的关键字,如实际中int a ...

  8. C语言结构体占用内存总结

    C语言结构体占用内存总结 前几天有个小朋友问了我一下,关于C语言结构体占用空间的问题.觉得以后会对小可爱有点帮助,就打算先写一下. struct Test {int a;char b;int c; } ...

  9. c语言链表内存分配失败,链表的C语言实现之动态内存分配

    链表的C语言实现之动态内存分配 來源:互聯網  2008-06-01 02:05:07  評論 一.为什么用动态内存分配 但我们未学习链表的时候,假如要存储数量比较多的同类型或同结构的数据的时候,总是 ...

  10. c语言十七:动态内存申请

    动态内存申请 一 动态内存申请 二 静态分配内存和动态分配内存 2.1 静态分配内存 2.2 动态分配内存 三 动态内存申请的相关函数 3.1 分配内存空间函数 malloc 3.2 free函数 ( ...

最新文章

  1. emui10是基于linux的么,华为EMUI10在意义上还能称作安卓吗?谷歌以后的安卓版本,华为是否有必要去更新?...
  2. ***警告即将发起重大*** 谁会是下一个目标?
  3. (转)JS之——解决IE6、7、8使用JSON.stringify报JSON未定义错误的问题
  4. Win8怎么查看IP地址
  5. ifelse语句是否必须以else结尾?
  6. JSP中文及传中文参数乱码解决方法小结
  7. HowToDoInJava Java 教程·翻译完成
  8. UTC转换BJT时间 时间转换 c语言程序设计 mooc 翁恺
  9. 基于python sklearn的 SVM支持向量机 类实现
  10. atitit.软件开发--socket框架选型--netty vs mina j
  11. nancy中的本地化
  12. 金融科技之交易:动量效应选股策略
  13. 微信小程序使用tensorflow做人脸识别检测卡顿的部分解决思路
  14. Java学习-API
  15. 编译镜像(映像).img文件
  16. DoIP协议从入门到精通系列——DoIP协议时间参数
  17. 高斯消去法与列主元消去法
  18. 树莓派项目实践 [1] —— 编程控制继电器组件实现电路开闭(C语言)
  19. 陈菜根谈“为什么子弹短信会火?”
  20. [从零学习汇编语言] - BX寄存器与loop指令

热门文章

  1. touchesEnded不响应
  2. webpack进阶之插件篇
  3. android3.2以上切屏禁止onCreate()
  4. Node.js用6行代码1个JS文件搭建一个HTTP静态服务器
  5. 黑马程序员——java语言基础——面向对象
  6. Python面试题总结(6)--数据类型(综合)
  7. h5页 点击返回时关闭_在微信、支付宝、百度钱包实现点击返回按钮关闭当前页面和窗口...
  8. 不出现php version网页_php冷知识 - 从命令行参数列表中获取选项
  9. 【自动化测试】整理各种测试开发工具!持续更新
  10. php 获取delete蚕丝_php结合Redis实现100万用户投票项目,并实时查看到投票情况的案例...