为什么即使我们将指针分配给 NULL,指针的指向对象的大小也不为零

Why size of pointed object of pointer is not zero even if we assigned pointer to NULL?

本文关键字:指针 对象 分配 我们将 NULL 为什么 使我们      更新时间:2023-10-16

我想知道为什么即使我们将指针分配给 NULL,指针指向的对象大小也不为零。谁能解释一下?

编译于 G++ 4.8,Ubuntu 14.04

Foo * foo=NULL;
cout<<"Size of pointed object of foo:"<<sizeof(*foo)<<endl;  //why it is not zero

sizeof 是一个编译时指令。因此,没有运行时检查来查看指针是否实际指向真实对象。根本没有检查指针。编译器会将该指令替换为该类型的大小(以字节为单位(,Foo在您的情况下也是如此。

sizeof内部,我们处于未评估的上下文中。其中的任何表达式都不会被计算。 sizeof只关心你传递它的表达式的类型*foo的类型当然是Foo&sizeof忽略引用,因此它返回类型为 Foo 的对象将占用的大小(以字节为单位(。

再次请注意,您编写的表达式永远不会被计算,因此foo指向的地方是否存在Foo对象并不重要 - foo的值(以及它指向的内存内容(与sizeof无关。

sizeof适用于类型,而不是值。*foo的类型(松散地说(是Foo,所以sizeof(*foo)sizeof(Foo)相同。