今早的一道思科笔试题

#include <iostream>
union A
{
    int a1;
    double a2;
    int a3;
};
typedef struct
{
    A a;
    char b;
}B;
class C
{
    double c;
    B b;
    A a;
};
int main()
{
    std::cout << sizeof(C) << std::endl; 
    return 0;
} //结果是32,求教为何?主要问题在于,B的大小怎么是16?
#C++工程师#
全部评论
union结构按最大的来,是8,然后strut结构对齐8+8=16
点赞 回复
分享
发布于 2015-10-24 16:07
如果一个结构里有某些结构体成员,则结构体成员要从其内部"最宽基本类型成员"的整数倍地址开始存储.(struct a里存有struct b,b里有char,int ,double等元素,那b应该从8的整数倍开始存储.)。此题的例子中,double c占8个字节,B中最宽的是A,A中最宽的是8,所以只要从8的整数倍开始存储。
点赞 回复
分享
发布于 2016-12-10 21:03
联想
校招火热招聘中
官网直投

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务