1.指针:内存地址
16位机器的代码时,指针占2个字节。
32位机器的代码时,指针占4个字节。
64位机器的代码时,指针占8个字节。
2.结构体占用空间
特殊:大结构体的成员有小结构体
原则:
①大结构体整体的空间=max{大结构体成员(不包括小结构体整体),小结构体成员}*n;
②大结构体中,前面的成员变量=max{成员变量}*n
同理,大结构体中,小结构体前面的变量占空间=max{小结构体成员}*n
注:“*n”是指整数倍
例:32位机器上,以下结构的sizeof(P)为()
A 26 B 38 C 40 D 3
struct A {
int a;
char b;
int c;
char d;
};
struct P {
struct A w[2];
short b;
struct A* p;
}
struct A {
int a; //4B
char b; //由原则2,b的大小必须是a的整数倍,4B
int c; //4B
char d; //由原则2,c的大小必须是a的整数倍,4B
};//4*4=16B
struct P {
struct A w[2];//16*2=32B
short b;//由原则2,b的大小必须是a的整数倍,4B
struct A* p;//32位机,地址占4B
//由原则1,P的大小必须是max{A.a,A.b,A.c,A.d,P.B,P.p}=4的整数倍
//原大小=32+4+4=38,自动填充2B变为40B,
}