【问题标题】:function declared as void* foo()函数声明为 void* foo()
【发布时间】:2012-10-17 20:49:01
【问题描述】:

我在我的操作系统书籍中遇到过这段代码:

void *foo()
{
     // does something

     pthread_exit(NULL);
}

void *foo是什么意思? 这是否意味着函数返回一个指向 void 类型的指针?

【问题讨论】:

  • 这意味着foo 是一个函数,它可以接受任意数量的参数并返回一个指向任何类型的对象的指针(或者,更迂腐的说法,一个指向@987654326 类型的对象的指针@,但没有 void 类型的对象。

标签: c void void-pointers


【解决方案1】:

不,这意味着该函数返回一个 untyped 类型的指针 - void*。

这是一种“通用”指针类型。任何指向数据的指针都可以转换为void*,并返回给调用者。但是,为了取消引用指针,您必须将其强制转换为非空指针类型(int*、long*、char* 等)。

【讨论】:

  • 我会说指针是类型化的,但它指向的类型是非类型化的。
【解决方案2】:

void * 表示它返回一个指向某种类型的指针,它没有指定哪个类型。为了使用,指针被强制转换为适当的类型,然后使用。事实上void *foo 只是间距问题。

看看这个explanation

【讨论】:

    猜你喜欢
    • 2017-07-28
    • 2020-06-16
    • 2015-01-16
    • 1970-01-01
    • 1970-01-01
    • 2020-03-08
    • 1970-01-01
    • 1970-01-01
    • 2021-10-01
    相关资源
    最近更新 更多