Nói rằng tôi có chức năng này:Tại sao tôi có thể gọi một hàm thông qua một con trỏ với quá nhiều đối số?
int func2() {
printf("func2\n");
return 0;
}
Bây giờ tôi tuyên bố một con trỏ:
int (*fp)(double);
này phải trỏ đến một chức năng mà phải mất một lập luận double
và trả về một int
.
func2
KHÔNG có bất kỳ tranh cãi, nhưng vẫn còn khi tôi viết:
fp = func2;
fp(2);
(với 2
là chỉ là một số tùy ý), func2` được gọi một cách chính xác.
Tại sao lại như vậy? Không có ý nghĩa gì đối với số lượng tham số mà tôi khai báo cho một con trỏ hàm?
Câu trả lời ngắn gọn là "tuyên bố một hàm không có đối số ... và sau đó cố tình chuyển một đối số ... là sai". – paulsm4