c++ - C++中指向函数的指针

标签 c++

当我用指向函数的指针做某事时,我注意到了一些东西但不明白

我这样做了:

#include <stdio.h>

int callback(void)
{
   return 5;
}

void call(int (*cpmpare)(void))
{
    int x;
    x = cpmpare();
    printf("%d", x);
}

void main()
{
    int (*compare)(void);
    int *a, b;
    b = 5;
    a = &b;
    compare = callback;
    printf("%p\n", &callback);
    printf("%p\n", compare);
    call(&callback);
}

我用 compare = &callback 代替了 compare = callback 并且它做了同样的事情,compare 得到了与 callback 相同的地址。

为什么它是双向的?

据我所知,比较指针和常规变量是错误的。

最佳答案

函数,如数组,在某些情况下会退化为指针。使用&functionfunction 几乎总是一样的。在您的示例中,情况确实如此。这两个语句在语义上是相同的:

compare = callback;
compare = &callback;

这两个也是:

call(&callback);
call(callback);

同样,当你想使用函数指针时,*也是可选的:

x = cpmpare();
x = (*cpmpare)();

关于c++ - C++中指向函数的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16777141/

相关文章:

c++ - 视觉 C++/工作室 : Application configuration incorrect?

c++ - 字节 vector 到四字

c++ - 宏扩展到预处理器 block

c++ - -std=c++11 标志在 gcc/g++ 4.4.6 中无法识别

c++ - 我的设备通过 USB 连接后触发 exe

c++ - 未定义的 impl 引用

c++ - Qt + protobuf,类型?

c++ - 先前声明的 G++ 错误,由于 include 中的函数名称重复而导致错误

c++ - 理解 C++ 中的多重继承

c++ - 有什么方法可以识别可用的内存地址吗?