2010-08-24 21 views

Trả lời

12

*(ptr[x])

Xem Wikipedia operator precedence table, hoặc, đối với một bảng chi tiết hơn, this C/C++ specific table.

+0

liên kết đó không đề cập đến dereferencing con trỏ ... nhưng nó cho biết truy cập mảng ràng buộc chặt chẽ nhất – Claudiu

+0

'*' nằm trong hàng thứ 2 của bảng, sau '[]' trong hàng thứ nhất. –

+0

Ah, tôi thấy làm thế nào điều này có thể gây nhầm lẫn, vì '*' có thể có nghĩa là phép nhân hoặc con trỏ. Nhân mặc dù sau, trong hàng 3 của bảng. –

-2

Sử dụng phong trào ngược chiều kim đồng hồ của phân tích và phân tích rằng ví dụ đơn giản

 
1. starting with ptr, work in counter-clockwise until you hit asterisk operator 
2. asterisk, in counter-clockwise until you hit subscript operator 
3. we arrive here, at subscript operator [x] 

Kể từ [] có độ ưu tiên cao hơn so với dấu hoa thị theo table này, mà làm cho nó *(ptr[x])

+0

phương pháp ngược chiều ngược này đến từ đâu? – Claudiu

+0

@Claudiu: Đó là một kỹ thuật nổi tiếng để phân tích cú pháp và phân tích biểu thức C ... nó được tìm thấy trong 'Lập trình C Chuyên gia - Peter Van der Linden', xem http://stackoverflow.com/questions/2305255/pointer-array- cú pháp-char-p-pn-in-cc – t0mm13b

+0

Đó là để phân tích cú pháp các thông số và khai báo kiểu. Nhưng trong câu hỏi '* ptr [x]' là một biểu thức, và vì vậy tất cả những gì bạn cần biết là ưu tiên toán tử. –

4

Trong C, tất cả postfix các toán tử có quyền ưu tiên cao hơn các toán tử tiền tố, và các toán tử tiền tố có quyền ưu tiên cao hơn các toán tử infix. Vì vậy, *(ptr[x])

Các vấn đề liên quan