在C语言处理数据的时候,经常会遇到将一个整形数据拆分成高位和低位,或者是将两个字符型数据组合成一个整形数据。通常的做法是将数据左移或者右移对数据进行组合或者拆分。现在可以利用联合体的特性来处理这一类数据。
联合体又叫共用体,共用体的所有成员占用同一段内存,修改一个成员会影响其余所有成员。共用体占用的内存等于最长的成员占用的内存。共用体使用了内存覆盖技术,同一时刻只能保存一个成员的值,如果对新的成员赋值,就会把原来成员的值覆盖掉。
共用体(Union),它的定义格式为:
union 共用体名{
成员列表
};
先看一个例子:
union data{
long n;
char ch;
short m;
};
在内存在n、ch、m占用共同一段内存。
union data{
long n;
char ch;
short m;
};
void main( void )
{
union data tem;
__asm( 'sim' ); //禁止中断
SysClkInit();
delay_init( 16 );
Uart1_Init( 9600 );
__asm( 'rim' );
while( 1 )
{
delay_ms( 500 );
tem.ch=0x12;
printf('%#x,%#x,%#lx\r\n',tem.ch,tem.m,tem.n);
}
}
给字符ch赋值0x12,然后打印ch,m,n,看看这三个数输出的值是多少。打印结果如下:
下来给m赋值0x3456,在打印看看结果
union data{
int n;
char ch[2];
};
void main( void )
{
union data tem;
__asm( 'sim' ); //禁止中断
SysClkInit();
delay_init( 16 );
Uart1_Init( 9600 );
__asm( 'rim' );
while( 1 )
{
delay_ms( 500 );
tem.n=0x1234;
printf('%#x,%#x,%#x\r\n',tem.n,tem.ch[0],tem.ch[1]);
printf('------------------------\r\n');
tem.ch[0]=0x56;
tem.ch[1]=0x78;
printf('%#x,%#x,%#x\r\n',tem.n,tem.ch[0],tem.ch[1]);
}
}
在共用体中设置一个整形变量,和一个字符数组,字符数组长度为2.这样两个字符变量的长度刚好和一个整形变量长度相等。
联系客服