问候编程爱好者.. 在学习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;。 ??
答案 0 :(得分:2)
在你的第二个例子中,sizeof
给你一个指针的大小,这是4个字节(在32位机器上)。在你的第一个例子中,sizeof
给你你的对象的大小,恰好是16个字节(填充后我相信...)
答案 1 :(得分:1)
在第一个示例中,您正在检查sample
类的大小 - 即,存储int
和double
所需的大小,以及可能的一些填充。< / p>
第二个例子是指针的大小 - 表示内存地址所需的大小。对于任何数据类型,无论其大小如何,都应该相同。
答案 2 :(得分:1)
指针只描述了你的对象在内存中的位置,因此指针的sizeof
不一定与你的对象sizeof
相同。
作为一个真实的例子,一张纸可能会告诉你某人的房子在哪里,但那张纸远远不及房子本身的大小!这两条信息/数据是不同的东西。
试试这个作为一个有启发性的例子;创建一个对象,创建一个指针,然后使用sizeof
指针,以及sizeof
您的对象。然后,还可以使用sizeof
取消引用指针。看看你找到了什么[: