繁体   English   中英

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

[英]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);

我的理解是否正确?

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

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

T *object = malloc(size);

无论T型是什么,都是对的。 当然,这同样适用于函数参数。

一些人(包括我自己)甚至争辩说, 在这种情况下铸造是危险的,降低了可读性,应该避免

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM