1、共用体(union)
当一个共用体被声明时, 编译程序自动地产生一个变量, 其长度为联合中类型字节数最多的变量的类型长度的整数倍。以上例而言,最大长度是double数据类型,所以foo的内存空间就是double型的长度。
1 2 3 4 5 |
union foo{/*“共用”类型“FOO”*/
char s[10]; /*“字符”类型的数组“S”下面有“10”个元素*/ int i; /*“整数”类型i*/ }; |
在这个union中,foo的内存空间的长度为12,是int型的3倍,而并不是数组的长度10。若把int改为double,则foo的内存空间为16,是double型的两倍。
2、大小端模式
大端模式:是指数据的高字节保存在内存的低地址中,地址由小向大增加,和阅读习惯一致。
小端模式:是指数据的高字节保存在内存的高地址中。
(1)为什么会有大小端之分:
在计算机系统中,是以字节为单位的,每个地址单元都对应着一个单元,一个字节为8bit。对于位数大于8位的处理器,寄存器的宽度不只一个字节,必然存在着多个字节的安排的问题,因此就导致了大端存储模式和小端存储模式。
(2)如何测试编译器是大端模式还是小端模式:
利用利用共用体几个不同的变量共同占用一段内存的性质输出第一个字节
#include <stdio.h>
- int check()
- {
- union UN
- {
- char c;
- int i;
- }un;
- un.i = 1;
- return un.c;
- }
- int main(void)
- {
- if(check()==1)
- printf("小端模式存储!\n");
- else
- printf("大端模式存储!\n");
- return 0;
- }