2015-12-11 22 views
5

Trong With arrays, why is it the case that a[5] == 5[a]? nó được giải thích rằng [] nhà điều hành trong a[5] được định nghĩa là *(a + 5) và vì + là giao hoán, 5[a] nghĩa *(5 + a) và do đó hai biểu đề cập đến vị trí nhớ cùng. Khỏe.Tại sao 5 [a] hợp lệ và không tạo ra lỗi của số nhận dạng không hợp lệ?

Tuy nhiên, C cũng xác định trong 6.4.2.1 rằng số nhận dạng không thể bắt đầu bằng chữ số. Trong số 5[a], số nhận dạng mảng là 5 không phải là số nhận dạng hợp lệ. Tại sao 5[a] không tạo ra lỗi về số nhận dạng không hợp lệ?

Trả lời

10

5 không phải là số nhận dạng, đó là số nguyên.

Tiêu chuẩn C theo nghĩa đen nêu rõ rằng 5[a] chỉ là đường cú pháp phải tương đương với *(5 + a). Không có yêu cầu trong C rằng toán hạng đầu tiên của toán tử + là một định danh, do đó, mã hoạt động tốt.

6.5.6, tôi nhấn mạnh:

Trường hợp bổ sung, hoặc cả hai toán hạng có kiểu số học, hoặc một toán hạng sẽ là một con trỏ tới một kiểu dữ liệu đầy đủ và sự khác sẽ có kiểu số nguyên.

+0

FYI: Tiêu chuẩn C sử dụng thuật ngữ _integer constant_ (làm rõ hằng số không có ký hiệu như trong các ngôn ngữ khác). – Olaf

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