隐式指针在函数的参数和参数中强制转换

时间:2013-05-22 16:43:46

标签: c pointers casting

如果有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);

我的理解是否正确?

1 个答案:

答案 0 :(得分:3)

  1. 没有“隐式投射”这样的东西。有明确的类型转换(转换)和隐式类型转换(类型强制或促销)。

  2. 由于void *与任何数据指针类型兼容(如果您的实现符合POSIX,那么它也与函数指针兼容),您的假设是正确的:< / p>

  3. T *object = malloc(size);

    无论类型T表示什么,

    都是正确的。当然,这同样适用于函数参数。

    有些人(包括我自己)甚至认为casting in this case is dangerous, decreases readability and should be avoided