网站登录入口,自己做名片的网站,天津建设信息网站,网站开发相关期刊今天一个读者朋友给我发的一段代码#xff0c;这段代码让他有了疑惑。代码如下#xff1a;#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;
}他的几个测试代码以及输出… 今天一个读者朋友给我发的一段代码这段代码让他有了疑惑。代码如下#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微信扫描二维码关注我的公众号