sizeof(指针)依赖于对象类型吗?
Does sizeof(pointer) depend on the object type?
我试图理解一个对象的指针是什么意思。我想知道如果A
是不完整类型,为什么指向A
的指针是完整类型。考虑下面的程序:
#include <stdio.h>
class B; //B is incomplete type here
int main()
{
printf("%dn",sizeof(B*));//4
}
请解释为什么sizeof(B*)
返回4?指向对象的指针在内存中究竟表示什么?
请解释为什么sizeof(B*)返回4?
它返回4,因为在你的系统中指针变量的大小是4。
指向对象的指针在内存中究竟代表什么?
对象驻留在内存中,指向对象的指针包含该对象的起始内存地址。例如,如果您的B
对象的大小为100字节,并且它被放置在1024-1123(100字节)内存位置,那么指向该对象的指针将保持值' 024(起始地址)。
指向sizeof的指针取决于对象类型吗?
我猜你的意思是指针大小取决于对象类型吗?。不,因为指针包含一个地址,它的大小取决于你的系统的地址空间,而不是它所指向的对象的类型。
指向对象的指针表示该对象在内存中的地址。如果在您的情况下它是4字节,这意味着您有一个32位的地址空间(操作系统或您的程序是在32位构建的)。要维护一个对象的地址,你实际上不需要对该对象有任何了解,因此使用一个指向不完整类型的指针就可以了。
请注意,这些都不适用于指向成员的指针,这是完全不同的东西。
相关文章:
- std::unordered_map 类型对象声明期间出现"field has incomplete type"错误
- C++ 多态模板类,模板类型对象的实例化
- 如何分配适合容纳 T 类型对象的缓冲区(可能过度对齐、可能有运算符 new 等)
- 如何构造一个 std::variant 类型对象,其自身 Templated 和构造函数转发参数
- C++:初始化指向具有不同类型对象的指针数组
- 在类 C++ 中构造的模板类型对象
- 如何将颁发者名称设置为x509_req类型对象
- 将任何数据类型/对象作为参数传递以确定其大小
- 将引用类型对象的数组从C#封送到C++
- <T> 从类型对象创建类型<T1>对象的构造函数
- C++是否有现有的方法来检查对象是否是派生类型对象
- C 模板:创建与现有对象相同的类型对象
- 链接列表中的虚函数 - 多种返回类型(对象)
- 没有适当操作员()的类型对象的呼叫
- 制作垫子类型对象的数组.输出窗口显示同一帧
- 抽象类型对象的分配
- 在std::list中就地创建自定义类型对象
- 接受泛型列表类型对象的参数
- C++-将模板类型对象强制转换为特定的数据类型
- 试图在C++中打印存储在类型对象数组中的信息