[英]Implicit pointer cast in parameter and argument of functions
如果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);
我的理解是否正确?
没有“隐式铸造”这样的东西。 有明确的类型转换(转换)和隐式类型转换(类型强制或促销)。
由于void *
与任何数据指针类型兼容(如果您的实现符合POSIX,那么它也与函数指针兼容),您的假设是正确的:
T *object = malloc(size);
无论T
型是什么,都是对的。 当然,这同样适用于函数参数。
一些人(包括我自己)甚至争辩说, 在这种情况下 , 铸造是危险的,降低了可读性,应该避免 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.