Tôi đã đi qua hai khai báo con trỏ mà tôi gặp khó khăn để hiểu. Sự hiểu biết của tôi về các quy tắc ưu tiên diễn ra như thế này:
Operator Precedence Associativity
(), [ ] 1 Left to Right
*, identifier 2 Right to Left
Data type 3
Nhưng ngay cả khi đưa ra điều này, tôi dường như không thể tìm ra cách đánh giá các ví dụ sau một cách chính xác:
Ví dụ đầu tiên
float * (* (*ptr)(int))(double **,char c)
Đánh giá của tôi:
*(ptr)
(int)
*(*ptr)(int)
*(*(*ptr)(int))
Sau đó,
double **
char c
Ví dụ thứ hai
unsigned **( * (*ptr) [5] ) (char const *,int *)
*(ptr)
[5]
*(*ptr)[5]
*(*(*ptr)[5])
**(*(*ptr)[5])
Tôi nên đọc chúng như thế nào?