请大神帮忙解答:数组强制转换为结构体指针的一个问题

代码是这样的,按照代码所示,QueueRead函数中的*Queue结构体与UsbReceiveBuffer是如何对应的?或者说Queue中的*out,*In,*End,Ndata分别指的是什么内容?

以下代码:
unsigned char UsbReceiveBuffer[2048];

typedef struct{
unsigned char *Out;
unsigned char *In;
unsigned char *End;
unsigned int NData;
unsigned int MaxData;
}DataQueue;

UsbBufferReceive(unsigned char *buf, unsigned int len)
{
for(i=0;i<len;i++)
{
(QueueRead(buf+i,(void *)UsbReceiveBuffer);
...
}
}

unsigned char QueueRead(unsigned char *Ret, void *Buf)
{
DataQueue *Queue;
Queue = (DataQueue *) Buf;
...
}

http://blog.chinaunix.net/uid-28458801-id-3439929.html

不建议这样使用,不要直接将数组转换为一个结构体指针,除非你知道自己在干什么。
因为直接这样转换会带来不确定的结果,这取决与结构体的对齐位数。如果结构体是单字节对齐,则Out是数组第1字节,In指向第2字节,End指向第3字节,Ndata指向第4-7字节。如果是双字节对齐,Out是数组第1字节,In指向第2字节,End指向第3字节,Ndata指向第5-8字节(第4字节填充)。以上解释仅供参考,实际的结构体布局依赖于编译器。