结构体的问题

我在qnx下用struct定义结构体如下
struct MyStru
{
char diat[3];
unsigned int sys;
char us[2];
}data;

当我用sizeof判断其大小时,为什么是8而不是7呢,怎样定义,会是7。
而且我用指针给此结构体赋值,当读取sys时,其结果是此结构的第5、6字节,而不是第4、5字节,为什么,该如何?


char *p;
int i;
p=&data;
for(i=1;i<=sizeof(struct MyStru);i++)
*p++ = i;
printf("sys:%d
",data.sys);


此处打印应该为(0x04,0x05) 1284,而实际为(0x05,0x06)1541

为什么?该如何?

我们现在用的一般是32位的系统结构,系统在分配内存空间时是以4个字节为最小单位分配的。即使你的结构体里某成员只有3个字节系统仍旧给它分配了四个字节。所以定义结构体时最好能够是4的整数倍,且最好是4个字节连在一起。如:struct _MyStru{
char a[3];
char b;
int c;
},而不要这样定义struct _MyStru{
char a[3];
int c;
char b;
}。
希望我讲清楚了:)