typedef union { unsigned int word; unsigned char byte[2]; }unWord16; 这是什么意思
- typedef union { unsigned int word; unsigned char byte[2]; }unWord16; 这是什么意思
- 关于typedef union
- 关于c语言中typedef union和union的区别 // 双字 公用体定义
- 关于typedef union 的一个问题 谢谢啦
- typedef union { UBYTE BYTE; struct{ UBYTE A: 6; UBYTE B1:1; UBYTE B0:1; }BIT; }A; 这是什么意思!
- typedef union与typedef struct这两个类型定义的区别是什么
- typedef union {long i; int k[5]; char c;} DATE; struct data { int cat; DATE cow; double dog;} too;
- typedef union { unsigned int i; float f; } value; 这里value是什么意思
就事综合类型,既是 unsigned short, 也是 byte
比较正确因该是用 unsigned short (2字节),不是unsigned int, unsigned int是(4)字节.
给你个例子:
typedef union { unsigned short word; unsigned char byte; }unWord16;
void main()
{
unWord16 test;
test.word=0xffbb;
test.byte=0xbb;
test.byte=0xff;
return;
}
test.word=0xffbb;
和
test.byte=0xbb;
test.byte=0xff;
结果是相同的
typedef union _USB_DEVICE_STATUS
{
byte _byte;
struct
{
unsigned RemoteWakeup:1;// Enabled: See usbdrv.c,usb9.c
unsigned ctrl_trf_mem:1;// ROM
};
} USB_DEVICE_STATUS;
相当于
union _USB_DEVICE_STATUS
{
byte _byte;
struct
{
unsigned RemoteWakeup:1;// Enabled: See usbdrv.c,usb9.c
unsigned ctrl_trf_mem:1;// ROM
};
};
typedef
union _USB_DEVICE_STATUS
USB_DEVICE_STATUS;
这两种写法
就是合起来写和分开写的区别而已
typedef
union 不是一种很特别的用法。
少打几个字符而已。
C++ :
struct,uion, class, enum 定义的名字可以单独使用
一般不会再写,像这样的代码,除非想写和C兼容的代码
C:
struct A{。。。。};
union B{。。。};
enum C{。。。};
A,B,C不是一个类型名字。struct A ,union B,enum C 才是类型名字。
C++:
struct A{...};union B{...};enum C{..};class T{...};
A,B,C,T 都是类型名字,可以直接定义变量。
typedef union _USB_DEVICE_STATUS
{
byte _byte;
struct
{
unsigned RemoteWakeup:1;// Enabled: See usbdrv.c,usb9.c
unsigned ctrl_trf_mem:1;// ROM
};
} USB_DEVICE_STATUS;
就有些画蛇添足的味道了。
typedef
union _USB_DEVICE_STATUS
USB_DEVICE_STATUS;
可以用 USB_DEVICE_STATUS代替union _USB_DEVICE_STATUS 当作类型名使用;
可以用来定义变量和内置类型区别不大。
所以C语言中,这种用法比较多。
C++中 自定义类型拥有和内置类型差不多的地位,这种用法就少见多了。
使用上是没有区别的,我有时候这么写,目地是为了避免链表结构中,指向自己前级单元的声明编译器无法离解,因此用个typedef让编译器认为这是一个类型.
int k是占几个字节呀??20还是10呀??
*****************************************************
int有的机器是2字节,有的是4字节,与硬件有关.用printf(“%d
“,sizeof(int)); 就可以看出是几
程序结果为52的话应该是int为4字节
x+5x+2x+5x=52 --》x=4
typedef union共用体每个成员共享存储空间,所以是最大的4*5
struct data结构体的话每个成员占用不同内存,所以是4+4*5+8
所以总共是20+32=52
UBYTE是宏定义过的 数据类型,应该是usigned char 类型的;
所以BYTE是 UBYTE类型的 变量,占8位;
同理A B1、B0也是UBYTE类型的变量,但 由于位域的概念,A只占6位,B1占1位,B0占1位;这其实是一种程序优化方案;
这个定义的总体意思是:
A类型占8位:如果想全部访问,那么就用A.BYTE,来访问;
如果想局部访问,就用A.BIT.A;A.BIT.B1;A.BIT.B2来访问。
struct 类型的内存分配是结合内部的所有变量大小和相关的,但不是简单的相加,从上面的例子就可以看出来, struct 类型的分配的内存大小是应该内部最大数据类型的整数倍,不足一倍的部分会自动补全成一倍大小,应该是编译器为了数据整齐,处理速度会快些把。 union 类型的内存分配,只是和联合体内的最大的一个数据类型的大小相关,而且 union 内的所有数据都在一个单独的内存空间里面。这些就是上面程序出现这样的结果的原因。
当struct data{ int cat; double dog; DATE cow;}结果是40+20=60
实际上是求sizeof(int cat;double dog; int k; ),
按最大字节对齐方式(8字节对齐方式),cat单独一个double里面,dog单独一个double里面,k可以放在一个double里面, 所以一共5个double,也就是40…… 所以,答案就是40+20=60……
其他一样。都是按最大字节对齐方式(8字节对齐方式)。
如果没有typedef那么就是普通的定义了匿名联合的一个变量value
加了typedef后, 定义的就是类型别名, 当类型一样用
typedef union { unsigned int i; float f; } value;
value a,b; //用value定义变量
相关tag:typedefunion
本站部分资源来源于网络,如果侵犯了您的权益,请联系我们删除1354090129@qq.com