面试中你不可回避的C、C++的问题(三)

本节继续上一次的关于sizeof的讲解:

这次主要是探讨一下,关于sizeof对于类以及对象之间的内存的大小的关系

二维指针域数组的关系

#include <stdio.h>

int main()
{
    //存储的是指针所以是3*4*4=48
    int ** a[3][4];
    printf("%d\n",sizeof(a));//48
    char** b[3][4];
    printf("%d\n",sizeof(b));//48
    return 0;
}
空类的大小,以及带有虚函数的空类的大小

#include <stdio.h>
#include <iostream>

using namespace std;

class A
{
};

class B
{
public:
    virtual void f() {}
};

int main()
{
    A a;
    cout << sizeof(a) << endl;//1
    B b;
    cout << sizeof(b) << endl;//4
    return 0;
}
再来讨论一下,带有类的成员函数以及继承类对象的大小

#include <stdio.h>
#include <iostream>
#include <complex>

using namespace std;

class Base
{
public:
    Base() { cout << "Base Constructor !" << endl; }
    ~Base() { cout << "Base Destructor !" << endl; }
    virtual void f(int ) { cout << "Base::f(int)" << endl; }
    virtual void f(double) { cout << "Base::f(double)" << endl; }
    virtual void g(int i=10) { cout << "Base::g()" << i << endl; }
    void g2(int i=10) { cout << "Base::g2()" << i << endl; }
};

class Derived:public Base
{
public:
    Derived() { cout << "Derived Constructor !" << endl; }
    ~Derived() { cout << "Derived Destructor !" << endl; }
    void f(complex<double>) { cout << "Derived::f(complex)" << endl; }
    virtual void g(int i=20) { cout << "Derived::g()" << i << endl; }
};

int main()
{
    Base c;
    Derived d;
    Base* pb = new Derived;
    cout << sizeof(Base) << endl;//4
    cout << sizeof(Derived) << endl;//4
    cout << sizeof(pb) << endl;//4
    cout << sizeof(c) << endl;//4
    cout << sizeof(d) << endl;//4
    return 0;
}


  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值