为什么同一类的普通对象和指针对象的大小存在差异

Why there is difference in sizes between normal object & pointer object of same class

本文关键字:对象 指针 存在 为什么 一类      更新时间:2023-10-16

向编程爱好者致意。。在C++中学习对象时,我对对象的大小有一个疑问,如下所示。。

1.Fisrt案例

#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

我的问题是,当对象从"sample-arr"更改为"sample*arr"时,为什么会出现输出差异??

在第二个例子中,sizeof为您提供了一个指针的大小,即4字节(在32位机器上)。在第一个例子中,sizeof给出了对象的大小,恰好是16个字节(在填充之后,我相信…)

在第一个示例中,您正在检查sample类的大小,即存储intdouble所需的大小,可能还有一些填充。

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

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

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

试着举一个有启发性的例子;创建一个对象,创建一个指向它的指针,并将sizeof作为指针,将sizeof作为对象。然后还取sizeof,即取消引用的指针。查看您的发现[: