指向结构体变量的指针。

来源:互联网 发布:软件编程家教 编辑:程序博客网 时间:2024/05/03 18:29

这两天调程序,在指向结构体变量指针这一块还有&运算符搞得不是很明白,下面是那段程序仔细研究一下。

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

原创粉丝点击