1

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

我的理解正确吗?

4

1 回答 1

3
  1. 没有“隐式转换”之类的东西。有显式类型转换(强制转换)和隐式类型转换(类型强制或提升)。

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

T *object = malloc(size);

无论类型如何T表示都是正确的。当然,这同样适用于函数参数。

有些人(包括我自己)甚至认为在这种情况下强制转换是危险的,会降低可读性,应该避免

于 2013-05-22T16:47:48.637 回答