C语言面试题——联合体测cpu的大小端 .
2014-09-19 22:37
253 查看
<span style="FONT-SIZE: 16px">#include <stdio.h> int checkCPU(); int main() { int a=1; char * p=(char*)&a; if(*p==1) printf("Little edian\n"); else printf("Big edian\n"); int ret = checkCPU(); printf("%d\n", ret); return 0; } int checkCPU() { union w { int a; char b; }c; c.a = 1; return (c.b == 1); } </span>
上面的一个就是用来测试cpu的大小端的函数,首先联合的概念要弄清楚,可以保存不同类型和长度的变量,编译器负责跟踪对象的长度和对齐要求,并且是在单块存储器中管理不同类型的数据的。上面的联合w在内存的分布如下:
这个不管是在大端还是小端都是这么存储的,接下来就是数据的存放了,还记得“小高高,小弟弟(低低)”吗?c.a=1;编译器就把1写入联合体c中的a,于是在0x22ff44~0x22ff47的地址里写着:
c.b:
在gdb的调试里看到:
一目了然了吧!~
转自:http://cache.baiducontent.com/c?m=9d78d513d9d431a94f9995697b14c0151a4381132ba7d4020ea48448e2732a42501590ac57510775a7d27d1716de384b9df72235775d2feddd8eca5ddcc88f357fd67a61671cf110538545b8cb317996668d04b2f042bbeff23992adcf809f12089b0d5267d6a7cd095b4a8b72f51131e0ad994d&p=8d78d21a85cc43ec08e2977f0d4c83&newp=9b72c54ad5c241f309b0c7710f4791231610db2151d4d0492e89&user=baidu&fm=sc&query=%B4%F3%D0%A1%B6%CB++%C1%AA%BA%CF%CC%E5&qid=a2dcd9ae0001e8ea&p1=3
相关文章推荐
- C语言判断计算机cpu大小端
- c语言的联合体以及大小端 (备忘)
- 利用联合体判断CPU是大端模式还是小端模式
- C语言——用联合体判断大小端
- C语言中判断CPU大小端的方法
- C语言——用联合体判断大小端
- C语言——用联合体判断大小端
- C语言面试题——大小端测试(一)
- C语言——用联合体判断大小端
- C/C++中的联合体union及CPU大小端判定
- C语言判断cpu是大端还是小端。
- 【转】C/C++中的联合体union及CPU大小端判定
- C/C++中的联合体union及CPU大小端判定
- 用C语言代码判别CPU的大小端模式
- C语言面试题——联合体测cpu的大小端
- 【转】C/C++中的联合体union及CPU大小端判定
- C/C++中的联合体union及CPU大小端判定
- c语言面试题总结
- 一道有趣的面试题——将int型数组强制转换为char*,再求strlen,涉及大小端
- 嵌入式linux面试题解析(二)——C语言部分二