tôi có các chức năng này hai thử nghiệm:Tại sao cả hai con trỏ hàm này đều hợp pháp trong 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);
}
chúng xuất hiện trở lại một cái gì đó khác nhau, vậy tại sao cả trong số họ mang lại kết quả giống nhau không?
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
Tôi đã giả định rằng một trong số họ sẽ trả về địa chỉ con trỏ hoặc chính con trỏ; thay vì giá trị được lưu trữ trên con trỏ ...
Vậy tại sao lại thực hiện điều này?
Bởi vì một trong hai cú pháp (có hoặc không có dấu hoa thị) là hợp lệ để gọi một chức năng thông qua một con trỏ. Trường hợp thứ hai là một cuộc gọi (bạn có thể biết bằng các dấu ngoặc đơn và các tham số đã truyền). – StoryTeller
Không tốt. Bạn nên sử dụng '(*** fun) (m, n)' để đủ điều kiện làm lập trình viên ba sao. –