我又来了,函数指针的问题

2018-09-19 11:04:53 +08:00
 zynlp

所以函数的前面加不加&和*都一样吗?WTF

#include <iostream>

using namespace std;

void foo(int i, void(f)(int)){
    printf("foo: %p\n", f);
    f(i);
}

void wtf(int i, void(*f)(int)){
    printf("wtf: %p\n", f);
    f(i);
}

void f(int i){
    printf("f: %d\n", i);
}

int main(int argc, char* argv[]){
    foo(1, f);
    foo(2, &f);

    wtf(3, f);
    wtf(4, &f);
    return 0;
}
2336 次点击
所在节点    C
6 条回复
ipoh
2018-09-19 11:17:31 +08:00
是这样的
sbw
2018-09-19 11:40:53 +08:00
int a[]; a 和 &a 也一样,标准规定的。
co3site
2018-09-19 11:50:00 +08:00
正如楼上所说,数组和函数直接用名字,本质是首地址
zynlp
2018-09-19 12:03:04 +08:00
@co3site 那为什么在参数声明的时候前面加不加*号也是一样的
kljsandjb
2018-09-19 12:31:15 +08:00
你 foo 和 wtf 的定义的函数指针其实一样,加*只是显式地说明这是函数指针而已,规定就是如此,就类似数组名是首地址一样,你可以用一个额外的指针变量去引用它,只是随你罢了,但是数组的情况更 tricky 一点点
co3site
2018-09-19 12:44:10 +08:00
@zynlp 本质都是传进去指针,相对来说定义是指针类型更加灵活(邪恶),你甚至还可以把任意内存地址转型成目标的函数指针类型传进去

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/490727

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX