Câu hỏi khá nhiều nói lên tất cả.C: Làm thế nào tôi có thể sử dụng một mảng con trỏ hàm cho các hàm có số lượng tham số biến?
Tôi không chắc chắn cách thực hiện điều này và chưa đến bất cứ nơi nào gần bất kỳ thứ gì hoạt động.
Dưới đây là một số chức năng ví dụ:
add(int x, int y) {
return x+y;
}
và
mean(int x1, int y1, int x2, int y2) {
return (x1 + y1 + x2 + y2)/4;
}
Cho đến nay tôi đã cố gắng sử dụng typedef với cả hai, nhưng tôi không thể hình dung làm thế nào để làm một cái gì đó điểm đến một trong hoặc loại:
typedef int (*mathfunc2)(int x, int y);
typedef int (*mathfunc4)(int x1, int y1, int x2, int y2);
????? func_table[2] = {add, mean};
Điều đó chính xác đã làm được điều đó! Cảm ơn, thưa ngài. Tôi hy vọng sẽ nhớ điều này nếu tôi nhận được 15 danh tiếng và cung cấp cho bạn một mũi tên lên :) – vaughanj
Tôi đã theo con trỏ hàm hoạt động khác với con trỏ void thông thường vì các tham số. Bạn không thể kết hợp các con trỏ hàm với các tham số khác nhau vì ngăn xếp sẽ bị hỏng khi dọn dẹp. Tôi đã hiểu nhầm điều gì chưa? – Ioan
@Ioan: Bạn phải gọi hàm thông qua một con trỏ tương thích với kiểu khai báo của hàm - có nghĩa là nếu bạn đưa con trỏ hàm vào một kiểu khác để lưu trữ, bạn phải đưa nó trở lại đúng kiểu để gọi chức năng. Ví dụ trong câu trả lời này thực hiện điều này. – caf