Trích dẫn từ tiêu chuẩn C11:Về các nhà điều hành mảng subscripting
Mảng subsripting (§ 6.5.2.1)
Định nghĩa của các nhà điều hành subscript
[]
làE1[E2]
giống hệt(*((E1)+(E2)))
.
Tôi muốn biết tại sao khung xung quanh E1
cần thiết (họ đã bị mất tích trong các tiêu chuẩn C89), tức trong đó biểu thức có thể (*(E1+(E2)))
thể khác với (*((E1)+(E2)))
?
Ý kiến duy nhất của tôi trước đây là E2 được đánh giá trước E1. Cái sau không ưu tiên và dấu ngoặc đơn được lồng nhau bằng nhau. Không biết tại sao. –
Tôi không viết dòng đó, hay bất kỳ dòng nào trong tiêu chuẩn, nhưng GUESS của tôi là "E1" và "E2" có nghĩa là biểu đạt, và họ chỉ muốn nhấn mạnh rằng E1 được đánh giá hoàn toàn ngay cả khi bạn về cơ bản " sao chép và dán "nó vào mô tả. –
Tôi hoàn toàn đồng ý với @ChristianStieber. Trong adition bạn phải nhớ rằng '+' và '[]' có các ưu tiên khác nhau, vì vậy nếu 'E1' là một biểu thức nó có thể liên kết khác với' + 'phía sau. –