0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何使用union来了解内存?

Linux爱好者 来源:嵌入式Linux 作者:写代码的篮球球痴 2021-06-22 17:01 次阅读

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

代码如下:

#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

”,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

”,a.i);

return 0;

}

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

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

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

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

责任编辑:haq

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • C语言
    +关注

    关注

    180

    文章

    7530

    浏览量

    128484
  • 代码
    +关注

    关注

    30

    文章

    4555

    浏览量

    66750

原文标题:C 语言,使用 union 了解内存

文章出处:【微信号:LinuxHub,微信公众号:Linux爱好者】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    内存寻址的具体设计

    本文的目的不是介绍内存寻址的具体设计,其实很多细节我也不了解,而是想通过内存寻址的设计思想看看对 FPGA 的设计有什么帮助和借鉴。
    的头像 发表于 12-16 09:25 256次阅读

    unionunion all有什么区别

    UnionUnion All是SQL中的两个关键字,它们用于将两个或多个SELECT语句的结果集合并在一起。这两个关键字虽然有相似的功能,但在实际使用中有一些重要的区别。下面将详细介绍Union
    的头像 发表于 12-06 10:22 406次阅读

    无需电流采样电阻的智能电机驱动IC,不来了解一下么?

    无需电流采样电阻的智能电机驱动IC,不来了解一下么?
    的头像 发表于 11-30 17:43 229次阅读
    无需电流采样电阻的智能电机驱动IC,不<b class='flag-5'>来了解</b>一下么?

    内存池的使用场景

    的屎山中,非常容易出现内存泄漏导致mmo的问题。 为了解决这两个问题,内存池就应运而生了。内存池预先分配一大块内存来做一个
    的头像 发表于 11-10 17:19 342次阅读
    <b class='flag-5'>内存</b>池的使用场景

    结构体struct和联合体union的区别?

    结构体struct和联合体union的区别?
    发表于 10-11 08:21

    多种角度来了解OBD2

    多种角度来了解OBD2
    的头像 发表于 09-04 09:55 1256次阅读
    多种角度<b class='flag-5'>来了解</b>OBD2

    堆栈内存和堆内存之间的区别

    编写有效的代码需要了解堆栈和堆内存,这使其成为学习编程的重要组成部分。不仅如此,新程序员或职场老手都应该完全熟悉堆栈内存和堆内存之间的区别,以便编写有效且优化的代码。
    发表于 08-07 12:23 375次阅读
    堆栈<b class='flag-5'>内存</b>和堆<b class='flag-5'>内存</b>之间的区别

    超干的干货来了!一文了解HTTP协议

    今天我们来了解另一个应用层协议——HTTP协议。推荐阅读《MQTT协议详解「概念、特性、版本及作用」》《TCP/IP协议不止是两个协议!》什么是HTTP协议?HTTP
    的头像 发表于 08-04 08:24 2136次阅读
    超干的干货<b class='flag-5'>来了</b>!一文<b class='flag-5'>了解</b>HTTP协议

    158.158 内存泄漏的分析 #硬声创作季

    内存
    充八万
    发布于 :2023年07月18日 07:00:28

    VMIPCI5565反射内存卡PCI-5565反射内存 VMIC-5565多模 PMC5565 1553B协议

    内存
    光达航电科技
    发布于 :2023年06月25日 15:28:09

    发力新兴小赛道,快来了解WAYON维安便携式储能全套方案

    发力新兴小赛道,快来了解WAYON维安便携式储能全套方案
    的头像 发表于 05-30 13:59 540次阅读
    发力新兴小赛道,快<b class='flag-5'>来了解</b>WAYON维安便携式储能全套方案

    如何使用union处理浮点数据?

    联合体(union)与结构体(struct)有一些相似之处。但两者有本质上的不同。在结构体中,各成员有各自的内存空间, 一个结构变量的总长度是各成员长度之和。而在联合体中,各成员共享一段内存
    的头像 发表于 05-15 09:47 700次阅读
    如何使用<b class='flag-5'>union</b>处理浮点数据?

    发力新兴小赛道,快来了解维安便携式储能全套方案

    发力新兴小赛道,快来了解维安便携式储能全套方案
    的头像 发表于 05-10 11:40 695次阅读
    发力新兴小赛道,快<b class='flag-5'>来了解</b>维安便携式储能全套方案

    发力新兴小赛道,快来了解WAY~ON维安便携式储能全套方案由代理供

    发力新兴小赛道,快来了解WAY~ON维安便携式储能全套方案由代理供
    的头像 发表于 05-10 11:31 445次阅读

    抗干扰、长寿命、高精度、高稳定性的烟雾变送器,速来了解

    抗干扰、长寿命、高精度、高稳定性的烟雾变送器,速来了解
    的头像 发表于 05-05 15:35 509次阅读
    抗干扰、长寿命、高精度、高稳定性的烟雾变送器,速<b class='flag-5'>来了解</b>