如果有2个函数定义:
void func(struct Node *arg){...}
void func2(void *arg){
func(arg);
...
}
但它们被称为:
struct Node *node = (char *)malloc(6);
func2(node)
我认为node
被隐含地投放到void*
然后投放到struct Node*
,所以我不需要做类似的事情:
func2((void *)node);
or func((struct Node *)arg);
我的理解是否正确?
答案 0 :(得分:3)
没有“隐式投射”这样的东西。有明确的类型转换(转换)和隐式类型转换(类型强制或促销)。
由于void *
与任何数据指针类型兼容(如果您的实现符合POSIX,那么它也与函数指针兼容),您的假设是正确的:< / p>
T *object = malloc(size);
T
表示什么,都是正确的。当然,这同样适用于函数参数。
有些人(包括我自己)甚至认为casting in this case is dangerous, decreases readability and should be avoided。