为什么普通物体和物体之间的尺寸存在差异?同一个类

时间:2015-11-28 07:19:44

标签: c++ class pointers sizeof

问候编程爱好者.. 在学习C ++中的对象时,我发现对对象大小的疑问如下。

1.Fisrt case

#include <iostream>
using namespace std;

class sample
{
    private:
        double i;
        int aa;

    public:
        sample()
        {

        }                   
};//end class sample

int main()
{       
    sample arr;
    cout<<sizeof(arr)<<endl;
}//end main

当我运行此代码时,编译器会输出16

2.第二个案例

#include <iostream>
using namespace std;
class sample
{
    private:
        double i;
        int aa;

    public:
            sample()
            {

            }                   
};//end class sample

int main()
{       
    sample *arr;
    cout<<sizeof(arr)<<endl;
}//end main

现在这次编译器给了我输出4

我的问题是,当对象从&#34;示例arr&#34;更改时,为什么会出现diffrence输出? to&#34; sample * arr&#34;。 ??

3 个答案:

答案 0 :(得分:2)

在你的第二个例子中,sizeof给你一个指针的大小,这是4个字节(在32位机器上)。在你的第一个例子中,sizeof给你你的对象的大小,恰好是16个字节(填充后我相信...)

答案 1 :(得分:1)

在第一个示例中,您正在检查sample类的大小 - 即,存储intdouble所需的大小,以及可能的一些填充。< / p>

第二个例子是指针的大小 - 表示内存地址所需的大小。对于任何数据类型,无论其大小如何,都应该相同。

答案 2 :(得分:1)

指针只描述了你的对象在内存中的位置,因此指针的sizeof不一定与你的对象sizeof相同。

作为一个真实的例子,一张纸可能会告诉你某人的房子在哪里,但那张纸远远不及房子本身的大小!这两条信息/数据是不同的东西。

试试这个作为一个有启发性的例子;创建一个对象,创建一个指针,然后使用sizeof指针,以及sizeof您的对象。然后,还可以使用sizeof 取消引用指针。看看你找到了什么[: