这两天调程序,在指向结构体变量指针这一块还有&运算符搞得不是很明白,下面是那段程序仔细研究一下。
typedef struct _USB_DOWN_PACKET //下传的数据包结构,用于命令/写数据
{
UINT8 mCommand; /* 命令码,见下面的定义 */
UINT8 mCommandNot; /* 命令码的反码,用于校验下传数据包 */
union
{
UINT8 mByte[4]; /* 通用参数 */
UINT16 mWord[2]; /* 通用参数,低字节在前,Little-Endian */
UINT32 mDword; /* 通用参数,低字节在前,Little-Endian */
void *mAddress; /* 读写操作的起始地址,低字节在前,Little-Endian */
} u;
UINT8 mLength; /* 下面的缓冲区的长度,读写操作的字节数 */
UINT8 mBuffer[ MAX_DATA_SIZE ]; /* 数据缓冲区 */
} USB_DOWN_PKT;
typedef struct _USB_UP_PACKET //上传的数据包结构,用于状态/读数据
{
UINT8 mStatus; /* 状态码,见下面的定义 */
UINT8 mCommandNot; /* 命令码的反码,用于校验上传数据包 */
UINT8 mReserved[4];
UINT8 mLength; /* 下面的缓冲区的长度,读操作的字节数 */
UINT8 mBuffer[ MAX_DATA_SIZE ]; /* 数据缓冲区 */
} USB_UP_PKT;
typedef union _USB_DATA_PACKET //USB上传或者下传数据缓冲区,利用一个共用体把上传和下传的数据缓冲区放在同一个存储空间里,这样比较节省存储空间。
{
USB_DOWN_PKT down;
USB_UP_PKT up;
} USB_DATA_PKT;
unsigned char *buf;
#define pudp ( (USB_DATA_PKT *)&buf )
尤其是对这个预定义的强制类型转换不是很明白,在这里是吧buf进行强制类型转换,转换为指向USB_DATA_PKT类型的指针并指向buf。
还有如下面类型的结构体定义,
struct Student
//声明结构体类型student
{ int num;
char sex;
float score;
};
struct Student stu;
//定义Student类型的变量stu
struct Student *p=&stu;
//定义p为指向Student类型数据的指针变量并指向stu