Tôi đang gặp khó khăn trong việc hiểu cú pháp của các con trỏ hàm. Những gì tôi đang cố gắng làm là, có một mảng các con trỏ hàm, không có đối số và trả về một con trỏ void. có ai giúp được không?Mảng con trỏ hàm trong C
Trả lời
Trước hết, bạn nên tìm hiểu về
cdecl
:cdecl> declare a as array 10 of pointer to function(void) returning pointer to void void *(*a[10])(void)
Bạn có thể làm điều đó bằng tay - chỉ cần xây dựng nó lên từ bên trong:
a
là một mảng:
a[10]
của con trỏ:
*a[10]
chức năng:
(*a[10])
dùng không có đối số:
(*a[10])(void)
lại quay
void *
:void *(*a[10])(void)
Sẽ tốt hơn nhiều nếu bạn sử dụng
typedef
để làm cho cuộc sống của bạn dễ dàng hơn:typedef void *(*func)(void);
Và sau đó làm cho mảng của bạn:
func a[10];
Lưu ý: liên kết ngay từ đầu rất hữu ích! – Ziezi
Sử dụng typedef
s
typedef void* func(void);
func *arr[37];
Khi cú pháp phức hợp quá phức tạp, typedef thường xóa mọi thứ.
Ví dụ:
typedef void *(* funcPtr)(void);
funcPtr array[100];
nào mà không có sự typedef Tôi đoán sẽ trông như thế:
void *(* array[100])(void);
Check-out http://www.newty.de/fpt/fpt.html#arrays cho ví dụ và sự giải thích của các mảng của C và C++ con trỏ hàm.
Bắt đầu với tên mảng và làm việc theo cách của bạn ra, nhớ rằng []
và ()
ràng buộc trước khi *
(*a[]
là một mảng của con trỏ, (*a)[]
là một con trỏ đến một mảng, *f()
là một hàm trả về một con trỏ, (*f)()
là một con trỏ đến một hàm):
farr -- farr
farr[N] -- is an N-element array
*farr[N] -- of pointers
(*farr[N])( ) -- to functions
(*farr[N])(void) -- taking no arguments
*(*farr[N])(void) -- and returning pointers
void *(*farr[N])(void); -- to void
- 1. Con trỏ hàm trong C#
- 2. Con trỏ mảng C++ [] hoặC++
- 3. lấy con trỏ hàm 'ldftn' trong C#
- 4. Con trỏ hàm được đúc trong C++
- 5. Con trỏ hàm trong mục tiêu C
- 6. con trỏ c và mảng
- 7. Con trỏ tới mảng chuỗi trong C
- 8. Gọi C++ con trỏ hàm từ C#
- 9. Cách lấy tên hàm từ con trỏ hàm trong C#?
- 10. Trả về con trỏ từ hàm C
- 11. Con trỏ hàm C++ làm tham số
- 12. Con trỏ hàm thành viên
- 13. Khởi tạo mảng con trỏ C++
- 14. C++: Mảng con trỏ hàm thành viên với các hàm khác nhau
- 15. Mảng con trỏ
- 16. C++ - mảng con trỏ tới Vector?
- 17. C con trỏ đến mảng/mảng các con trỏ định hướng
- 18. Hàm con trỏ tới hàm __attribute __ ((const))?
- 19. Trong C, là các con trỏ mảng hay được sử dụng như con trỏ?
- 20. Chuyển con trỏ cấu trúc đến hàm trong c
- 21. Con trỏ hàm với tham số mặc định trong C++
- 22. Con trỏ hàm và gọi lại trong C
- 23. Xóa một mảng các con trỏ đến các hàm?
- 24. Cú pháp cho một con trỏ tới một hàm trả về một con trỏ hàm trong C
- 25. C con trỏ hàm với C++ 11 lambdas
- 26. Con trỏ hàm C++/C trả về void *
- 27. incrementing một mảng của con trỏ trong C
- 28. Có phải con trỏ và mảng nào khác trong C?
- 29. Con trỏ trong C# để tạo mảng int?
- 30. Mảng của con trỏ
Bạn sẽ nhận được phản hồi tốt hơn nếu bạn đăng một số mã mà bạn đã thử, ngay cả khi nó không hoạt động và giải thích tốt nhất bạn có thể giải quyết vấn đề. Nó thể hiện nhiều nỗ lực hơn từ phía bạn. –
kiểm tra [link] này (http://c-faq.com/decl/spiral.anderson.html) – Vikram