
所以函数的前面加不加&和*都一样吗?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: %\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; } 1 ipoh 2018-09-19 11:17:31 +08:00 是这样的 |
2 sbw 2018-09-19 11:40:53 +08:00 int a[]; a 和 &a 也一样,标准规定的。 |
3 co3site 2018-09-19 11:50:00 +08:00 via Android 正如楼上所说,数组和函数直接用名字,本质是首地址 |
5 kljsandjb 2018-09-19 12:31:15 +08:00 via iPhone 你 foo 和 wtf 的定义的函数指针其实一样,加*只是显式地说明这是函数指针而已,规定就是如此,就类似数组名是首地址一样,你可以用一个额外的指针变量去引用它,只是随你罢了,但是数组的情况更 tricky 一点点 |