这个问题询问了使用malloc
分配的对象的动态类型是什么,根据最佳答案:
malloc
的返回值是一块未初始化的存储空间。在该存储空间内没有构造任何对象,因此它没有动态类型。
这带来另一个问题:在何时说malloc
返回的存储空间获得了类型?例如:
void *p = malloc(sizeof(int));
int *pi = (int*)p;
尽管未被初始化,我们可以说pi
指向一个动态类型为int
的对象吗?
这个问题询问了使用malloc
分配的对象的动态类型是什么,根据最佳答案:
malloc
的返回值是一块未初始化的存储空间。在该存储空间内没有构造任何对象,因此它没有动态类型。
这带来另一个问题:在何时说malloc
返回的存储空间获得了类型?例如:
void *p = malloc(sizeof(int));
int *pi = (int*)p;
尽管未被初始化,我们可以说pi
指向一个动态类型为int
的对象吗?
malloc
不足以创建对象。”
(int *)p
不属于这些情况。*p = 0
不能创建对象,但 new (p) int()
可以创建一个对象。 - T.C.p
没有被赋值指向一个对象,访问该 glvalue 会导致未定义行为。如果是这样的话,争论其副作用没有什么意义。 - Columbop
没有指向任何对象。 - Columbo
p1
,你可以说它是指向动态内存中的int
指针,但你不能说任何关于“动态类型为int
的对象”的事情,因为这样的东西不存在。 - user207421int
时,就会出现这种情况。 - Steve Jessop