sizeof(指针)是否依赖于对象类型?

时间:2014-05-28 03:59:52

标签: c++ pointers sizeof

我试图理解指向对象的指针是什么意思。我想知道A是不完整的类型,为什么指向A的完整类型。请考虑以下程序:

#include <stdio.h>

class B; //B is incomplete type here

int main()
{
    printf("%d\n",sizeof(B*));//4
}

请解释为什么sizeof(B*)返回4?指向对象的指针究竟在内存中表示什么?

2 个答案:

答案 0 :(得分:3)

指向对象的指针表示内存中对象的地址。如果在您的情况下它是4个字节,则意味着您有32位地址空间(操作系统或您的程序以32位构建)。要保持对象的地址,你真的不需要任何对象的知识,所以指向不完整类型的指针就可以了。

请注意,这些都不适用于指向成员的指针,而这些成员是完全不同的野兽。

答案 1 :(得分:2)

  

请解释为什么sizeof(B *)返回4?

它返回4,因为系统中指针变量的大小为4。

  

对象的指针究竟在内存中表示什么?

对象驻留在内存中,指向对象的指针包含该对象的起始内存地址。例如,如果您的B对象的大小为100字节,并且它位于1024-1123(100字节)的内存位置,则指向该对象的指针将保存值“024(起始地址)。” p>

  

指向sizeof的指针取决于对象类型吗?

我猜你的意思是指针大小取决于对象类型吗?。不,因为指针包含一个地址,它的大小取决于系统的地址空间,而不是它指向的对象类型。