所以函数的前面加不加&和*都一样吗?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;
}
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 一点点
|