1sizeof 内存对齐问题
若int 占 2 个字节, char 占 1 个字节, float 占 4 个字节, sizeof(xc) 大小是:
struct stu {
union{
char bj[5];
int bh[2];
} _class;
char xm[8];
float cj;
}xc;
解析:
结构体内存对齐规定:结构体的总大小为结构体最宽基本类型成员大小的整数倍,这道题目中最宽的是float,其占4个字节,但是此题目中还有一个联合体(联合体的大小取内部最大的字节数, union内部的数据成员中最大的数据成员为int,所以每个数据成员要为2的倍数)
struct stu{
union{
char bj[5]; // 1*5=5
int bh[2]; // 2*2=4
} class; // union中最大的字节数是5,但需要补齐为 int 的整数倍,所以实际大小为 5 +1 = 6,但是外面看struct的对齐数,最大的是float的4字节,所以按四字节对齐,这样union补齐成8字节(4的倍数)是8
char xm[8]; // (8) + 8 = 16,16是 float所占字节数 的倍数,不需要对齐
float cj; // (16) + 4 = 20, 是 float 的倍数,不需要补齐,最终大小为 20
}xc
2、函数调用问题
若已定义的函数有返回值,则以下关于该函数调用的叙述中错误的是()
解析:
返回值存在寄存器中,没有地址,不能作为形参,但可以作为实参。
函数调用参数的数据传递是单向传递,即实参传给形参,不能由形参传给实参。所以函数调用不可以作为另一个函数的形参!



