Nếu tôi làm *ptr[x]
, tương đương với *(ptr[x])
hoặc (*ptr)[x]
?Trật tự các hoạt động cho dereference và bracket-ref trong C
Trả lời
*(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.
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])
phương pháp ngược chiều ngược này đến từ đâu? – Claudiu
@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
Đó 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ử. –
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])
- 1. Toán tử dereference cho unique_ptr không hoạt động trong Eclipse
- 2. #define và trật tự #include trong C
- 3. Confused về trật tự hoạt động khi sử dụng một ma trận trong XNA, C#
- 4. trật tự tự động trong một lựa chọn
- 5. LINQ và trật tự bởi
- 6. Toán tử quá tải trong C++ và dereference
- 7. trật tự Byte với một mảng lớn các ký tự trong C
- 8. VÀ HOẶC thứ tự các hoạt động
- 9. khung Entity nơi, trật tự và nhóm
- 10. SQLite và tùy chỉnh trật tự bởi
- 11. sẽ trật tự cho enum.values () luôn cùng
- 12. LINQ: Riêng biệt và trật tự
- 13. LinkedHashMap vấn đề trật tự
- 14. PostgreSQL array_agg trật tự
- 15. Biến trong C/C++ hoạt động như thế nào?
- 16. Tại sao trong C# có vấn đề trật tự cho khởi tạo tĩnh?
- 17. Chi phí cho các hoạt động chung cho C#?
- 18. C++ bản đồ băm riêng giữ gìn trật tự chèn
- 19. Android AsyncTask - Trật tự thực hiện
- 20. Trật tự truyền tải trong Files.walkFileTree
- 21. gọi Chức năng trong sai trật tự
- 22. Unknown cột tại khoản trật tự
- 23. WHERE và JOIN thứ tự hoạt động
- 24. NET trật tự cột ListView vấn đề
- 25. trật tự bởi 1.99.10 và 1.99.9 máy chủ sql
- 26. Arm lắp ráp - nhiều push/trật tự pop và SP
- 27. Merge hai mảng và trật tự ActiveRecord bởi created_at
- 28. Boolean Logic (thứ tự của các hoạt động) A và B hoặc C
- 29. Tôi có thể tự do() các biến tĩnh và tự động trong C?
- 30. C# Lambdas: Làm thế nào * Không * để trì hoãn "Dereference"?
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
'*' nằm trong hàng thứ 2 của bảng, sau '[]' trong hàng thứ nhất. –
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. –