我有這兩個測試功能:爲什麼這兩個函數指針在C/C++中合法?
int apply_a(int (*fun)(int, int), int m, int n) {
return (*fun)(m,n);
}
int apply_b(int (*fun)(int, int), int m, int n) {
return fun(m,n);
}
他們似乎返回不同的東西,那麼爲什麼他們都產生相同的結果?
int add(int a, int b) {return a + b;}
int res_a = apply_a(add, 2, 3); // returns 5
int res_b = apply_b(add, 2, 3); // returns 5
我會假設其中一個會返回指針地址或指針本身;而不是存儲在指針上的值...
那麼爲什麼要這樣做呢?
因爲任一語法(帶或不帶星號)的有效期爲通過指針調用一個函數。第二種情況是一個調用(你可以通過括號和傳遞的參數來判斷)。 – StoryTeller
這兩個都不錯。你應該使用'(*** fun)(m,n)'作爲一個三星程序員。 –