若是結構體中的成員又是另一種結構體類型時應該怎麼計算呢?只需把其展開便可。但有一點須要注意,展開後的結構體的第一個成員的偏移量應當是被展開的結構體中最大的成員的整數倍。看下面的例子:
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;
}