我来自C背景,我理解的是void指针和struct指针之间没有区别,因为它们在某处确实是相同大小的地址。
我错了吗?
如果没有,cpp中的这个东西也一样吗?对象varname和object * varname和void * varname?
之间的区别是什么答案 0 :(得分:0)
在C和C ++中,以下代码有效:
Object *objp1 = voidp;
也就是说,从指向对象类型的指针到指向void的指针存在隐式转换。
在C中,以下代码也是合法的:
Object *objp1 = voidp; // Error: invalid conversion
Object *objp1 = static_cast<Object*>(voidp); // Ok: cast says to do it
也就是说,还有另一种隐式转换。
在C ++中,转换不合法;你必须使用演员:
import gc
def dump_garbage():
"""
show us what's the garbage about
"""
# force collection
print("\nGARBAGE:")
gc.collect()
print("\nGARBAGE OBJECTS:")
for x in gc.garbage:
s = str(x)
if len(s) > 80: s = s[:80]
print(type(x),"\n ", s)
if __name__=="__main__":
import gc
gc.enable()
gc.set_debug(gc.DEBUG_LEAK)
# make a leak
l = []
l.append(l)
del l
# show the dirt ;-)
dump_garbage()
在这两种语言中,如果将void指针转换为指向其他类型的指针而指针不指向该类型的对象,则行为未定义。