什么是sizeof(salesman)
?它说48个字节,需要解释原因。
class customer {
char c;
double l;
int k;
};
class salesman: private customer{
int salno;
char salname[20];
protected :
float salary;
};
答案 0 :(得分:4)
嗯,很难猜测编译器。
但是customer
可能合理地要求1 + 7 + 8 + 4 + 4 = 20个字节(7个和最后4个是填充)。然后为salesman
增加了4 + 20 + 4 = 28,看起来编译器足够聪明,可以在进行子类化时从customer
中删除最后4个字节的填充。那是48!
以上假设sizeof (int)
和sizeof (float)
为4,sizeof (double)
为8。
答案 1 :(得分:1)
根据以下假设:
char
的大小为1个字节
int
的大小为4个字节
float
的大小为4个字节
double
的大小为8个字节
添加了填充,因此大小为N的变量始终位于可被N整除的地址
salesman
个实例的内存映射是:
Byte 0 : char c;
Bytes 8-15: double l;
Bytes 16-19: int k;
Bytes 20-23: int salno;
Bytes 24-43: char salname[20];
Bytes 44-47: float salary;
因此salesman
实例的总大小为48个字节。
但请注意,上述假设在每个编译器上都不一定正确。