若是结构体中的成员又是另一种结构体类型时应该怎么计算呢?只需把其展开便可。但有一点须要注意,展开后的结构体的第一个成员的偏移量应当是被展开的结构体中最大的成员的整数倍。看下面的例子:
struct stu_5
{
short i;
struct
{
char c;
int j;
}ss;
int k;
};
结构体stu5的成员ss.c的偏移量应该是4,而不是2。整个结构体大小应该是16。
如何给结构体变量分配空间由编译器决定,以上状况针对的是Windows XP下的VC 6.0。其余平台的C编译器可能会有不一样的处理。
示例代码:数组
#
include
<stdio.h
>
struct stu
{
int i;
char c;
int k;
};
//大小为12
struct stu_2
{
int k;
short t;
};
//大小为8
struct stu_3
{
char c1;
int i;
char c2;
};
//大小为12
struct stu_4
{
char c1;
char c2;
int i;
};
//大小为8
struct stu_5
{
short i;
struct
{
char c;
int j;
} ss;
int k;
};
//大小为16
struct stu_6
{
int i;
char j;
char k;
};
//大小为8
int main(
void )
{
int a, b, c, d, e, f;
a
=
sizeof (
struct stu);
b
=
sizeof (
struct stu_2);
c
=
sizeof (
struct stu_3);
d
=
sizeof (
struct stu_4);
e
=
sizeof (
struct stu_5);
f
=
sizeof (
struct stu_6);
printf(
"size of struct stu = %d\n" , a);
//12
printf(
"size of struct stu_2 = %d\n" , b);
//8
printf(
"size of struct stu_3 = %d\n" , c);
//12
printf(
"size of struct stu_4 = %d\n" , d);
//8
printf(
"size of struct stu_5 = %d\n" , e);
//16
printf(
"size of struct stu_6 = %d\n" , f);
//8
return
0;
}