【问题标题】:Function pointer with (void*)带 (void*) 的函数指针
【发布时间】:2013-05-21 06:20:13
【问题描述】:

在 C 中,函数指针 (void*) 在做什么:

    int (*fn) (void*)

如果参数什么都不是,那么它应该是:

    int (*fn) ()

我的理解是void* 是一块内存。 void* mem 表示 mem 指向一块内存。但是没有名字的(void*) 是什么?

【问题讨论】:

  • "如果参数什么都不是,那么它应该是" 请注意:在 C 语言中,void foo() 并不意味着没有参数的函数;不同的是,它意味着一个具有未定义数量参数的函数。因此,这样的调用完全有效:foo(1,"abc",2.3)。如果要指定一个参数为 0 的函数,则需要在 () 之间使用 void,如下所示:void foo(void)。

标签: c


【解决方案1】:

该函数指针声明不需要您为void* 命名。它只需要一个类型来定义参数列表。

这类似于如何:

void my_function(int x);

和

一样有效
void my_function(int);

【讨论】:

  • 此外,函数原型中使用的参数名称不必与函数定义中使用的参数名称匹配。你可以有extern char *strcpy(char *target, const char *source); 并写char *strcpy(char *dst, const char *src) { while ((*dst++ = *src++) != '\0') ; } 作为实现。
【解决方案2】:

void * 是一个匿名指针。它指定一个指针参数,但不指明所指向的具体数据类型。

【讨论】:

    【解决方案3】:

    未命名的参数与没有参数不同。声明:

    int (*fn)(void*);
    

    只是声明fn 是一个函数指针,它接受void* 参数。参数名称无关紧要(仅在函数实现中有意义,其中它是局部变量的名称)。

    (虽然在函数声明中参数名称不是必需的,但对于阅读代码以识别参数是什么的人来说仍然很有用。)

    【讨论】:

      【解决方案4】:

      表示fn是“任何以一块内存为参数,并返回一个int的函数”

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-09-05
        • 2018-08-25
        • 2013-11-14
        • 2021-05-09
        • 1970-01-01
        • 1970-01-01
        • 2016-11-23
        • 2020-06-11
        相关资源
        最近更新 更多