【问题标题】:Does sizeof(pointer) depend on the object type? [duplicate]sizeof(pointer) 是否取决于对象类型? [复制]
【发布时间】:2014-07-17 03:27:43
【问题描述】:

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

#include <stdio.h>

class B; //B is incomplete type here

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

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

【问题讨论】:

  • @LightnessRacesinOrbit 这样的评论适用于任何问题。
  • 不,不是。 “什么是指针” => 是的
  • 不,不是。有很多非新手问题。

标签: c++ pointers sizeof


【解决方案1】:

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

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

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

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

sizeof 的指针是否取决于对象类型?

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

【讨论】:

  • 这意味着一个指针是4个字节对于那个特定的指针类型。在大多数系统上,所有对象指针的大小都相同,但语言标准允许不同的指针类型具有不同的大小。
  • 指针存在于处理器内部还是只是编程语言的抽象?
  • @KeithThompson,我不知道。你能给我一些参考,我想了解更多。
  • @St.Antario,你的问题是错误的。处理器内部没有任何东西。指针是一种语言工件,它保存内存地址(主存储)的值,处理器使用该值在该特定内存位置执行读/写。
【解决方案2】:

指向对象的指针表示对象在内存中的地址。如果在您的情况下它是 4 个字节,则意味着您有一个 32 位地址空间(操作系统或您的程序是 32 位内置的)。要维护对象的地址,您实际上并不需要任何对象知识,因此指向不完整类型的指针就可以了。

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

【讨论】:

    猜你喜欢
    • 2010-09-28
    • 2019-02-12
    • 2018-03-09
    • 1970-01-01
    • 2015-02-16
    • 1970-01-01
    • 1970-01-01
    • 2015-02-17
    相关资源
    最近更新 更多