2016-02-24 21 views
5

Tôi đã học mảng ngày nay. Tôi đã đi qua một tuyên bố về một mảng và khởi tạo phần tử của nó theo cách này:C++: int x [+30] là khai báo hợp lệ?

int x[+30]; 
x[+1]=0; 

Điều này làm tôi khó hiểu một chút. Tôi có khái niệm nhớ rằng khi chúng ta viết:

x[n]=0; 

Sau đó, nó có nghĩa là:

*(x+n)=0; 

Sau đó viết x[+1] có nghĩa *(x++1) và điều này dường như không hợp lệ. Xin vui lòng sửa cho tôi những sai lầm mà tôi đang làm trong việc hiểu khái niệm này.

+1

lưu ý, '* (x ++ 1)' không hợp lệ vì '++' là toán tử tăng, biểu thức được phân tách thành '* ((x ++) 1)' –

+0

@ utkarsh867: sử dụng cụ thể công suất mảng một cách rõ ràng được + ve? –

+2

Lưu ý rằng '* (x + + 1)' ** là ** hợp lệ. Quy tắc quan trọng ở đây là phép biến đổi hoạt động ở cấp ** mã **, chứ không phải cấp ** **. – MSalters

Trả lời

10

x[n] có nghĩa là *((x)+(n)) (lưu ý các màu đen) và x[+1] có nghĩa là *((x)+(+1)). Điều này là hợp lệ.

N3337 5.2.1 Subscripting

Khái niệm E1 [E2] là giống hệt nhau (theo định nghĩa) để * ((E1) + (E2))

+5

Đẹp blackets! –

+2

Rất tốt. Tôi gần như có những người giống nhau. – erip

+1

Palentheses và blaces là tốt quá. –

7

Biểu tượng + Plus có thể hành động như một nhà điều hành Unary. Nó thường không có hiệu lực, nhưng hậu quả là nó bị loại bỏ trước khi số được giải quyết. Ví dụ:

int x[+30]; 

là chuyển đổi sang

int x[operator+(30)]; 

nào sau đó trở thành

int x[30]; 

Như vậy, biểu thức này

x[+1] = 0; 

sẽ chỉ đơn giản là giải quyết như

x[1] = 0; 

Nó sẽ không giải quyết dưới dạng * (x ++ 1), đặc biệt vì đó không phải là cú pháp hợp lệ trong C++.

+1

Tôi không nghĩ rằng cộng thêm đơn nhất được chuyển thành 'toán tử +' cho đối số 'int', nó là toán tử tích hợp. – TartanLlama

+0

@TartanLlama Đối với tất cả các ý định và mục đích, nó được coi là như vậy. Bạn có thể viết các biểu thức như 'int n = 8 + +9;' và trình biên dịch sẽ chấp nhận nó và phân tích nó thành '8 + 9'. – Xirema

+1

Nhưng nó không liên quan gì đến 'toán tử +', mà chỉ được xem xét nếu đối số là một kiểu lớp hoặc kiểu liệt kê.Toán tử '+' không giống với 'toán tử +'. – TartanLlama

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