Câu trả lời kỹ thuật là tờ khai cũng theo điều hành được ưu tiên. Các toán tử [] có độ ưu tiên cao hơn so với các nhà điều hành * unary, cho ví dụ int * p [N]; sẽ được phân tích như int (* (p [N])) ;, để nó có nghĩa là "p là, một mảng của N, con trỏ tới, int". Các dấu ngoặc xung quanh * trong ví dụ thứ hai là chính xác để vượt qua những ưu tiên của []. Một cách có liên quan và có thể trực quan để suy nghĩ về nó là khai báo trong C "giống như" làm thế nào họ có thể được sử dụng. Khi bạn nhìn thấy int * p [N] ;, đó có nghĩa là các biểu thức * p [N] có kiểu int. Vậy điều đó có nghĩa là gì? * p [N] phương tiện (với điều hành ưu tiên, tất nhiên) p, lập chỉ mục để tồn tại, và sau đó dereferenced, và kết quả này trong một int. Điều đó có nghĩa p phải là một mảng của con trỏ đến int. Trong khi đó, int (* p) [N]; có nghĩa là p, dereferenced, và sau đó được lập chỉ mục, đã gõ int, do đó có nghĩa p phải là một con trỏ đến một mảng int. Điều này đặc biệt hữu ích trong trường hợp con trỏ chức năng, ví dụ: int (* f) (char); có nghĩa là f, dereferenced, và sau đó áp dụng cho một char, kết quả trong một int, có nghĩa là f là một con trỏ đến một chức năng mà phải mất một char và trả về một int.
đang được dịch, vui lòng đợi..