谁可以高数我这个怎么用啊?最好详细点啊 举个例子什么的C/C++ codeunion h{uint8 RxBuf[29]struct RFRXBU
谁可以高数我这个怎么用啊?最好详细点啊 举个例子什么的··
C/C++ codeunion h{ uint8 RxBuf[29]; struct RFRXBUF { uint8 HeadCom[3]; //命令头 uint8 Laddr[8]; uint8 Saddr[2]; uint8 DataBuf[16]; //数据缓冲区 }RXDATA;}RfRx;//无线接收缓冲区
[解决办法]union是联合, 即RxBuf 和 RFRXBUF共享一片内存区,对RxBuf的操作会影响RFRXBUF,相反也是一样的。
union的作用在于,对这片内存区更加好的解释,别人看了就知道,前3个uint8的长度存放的是命令头等等。
而且也方便对整个RFRXBUF进行操作,即对RxBuf进行操作就可以了
[解决办法]union是联合体, 即RxBuf 和 RFRXBUF共享一片内存区,同一时刻只能对union下的一个进行赋值,
这个联合体下面是一个数组 和 一个结构体 共享内存。,使用的时候 只需对其中一个赋值使用就可以,
就是 不能同时使用 数组和结构体,,只能使用一个,
共用体表示几个变量共用一个内存位置,在不同的时间保存不同的数据类型和不同长度的变量。在union中,所有的共用体成员共用一个空间,并且同一时间只能储存其中一个成员变量的值。
1、union中可以定义多个成员,union的大小由最大的成员的大小决定。
2、union成员共享同一块大小的内存,一次只能使用其中的一个成员。
3、对某一个成员赋值,会覆盖其他成员的值(也不奇怪,因为他们共享一块内存。但前提是成员所占字节数相同,当成员所占字节数不同时只会覆盖相应字节上的值,比如对char成员赋值就不会把整个int成员覆盖掉,因为char只占一个字节,而int占四个字节)
4、联合体union的存放顺序是所有成员都从低地址开始存放的。
下面看一个简单的代码:
C/C++ code#include <stdio.h> typedef union{ char c; int a; int b;}Demo; int main(int argc, char **argv){ Demo d; d.c = 'H'; d.a = 10; d.b = 12; printf("size: %d\n", sizeof(d)); printf("%c\t%d\t%d\n", d.c, d.a, d.b); return 0;}