2011-11-13 42 views
11

tôi đã biết rằng đây là đúng:C cú pháp lạ mảng trong mảng đa chiều

x[4] == 4[x] 

tương đương đối với mảng đa chiều là gì? Điều sau đây có đúng không?

x[4][3] == 3[x[4]] == 3[4[x]] 
+2

Bạn đã thử chưa? Chuyện gì đã xảy ra? –

+0

Làm thế nào là x [4] bằng 4 [x]? –

+1

@Jim: x [4] == * (x + 4) == * (4 + x) == 4 [x] –

Trả lời

13

x[y] được định nghĩa là *(x + (y))

x[y][z] sẽ trở thành *(*(x + (y)) + z)

x[y[z]] sẽ trở thành *(x + (*(y + (z))))


x[4][3] sẽ trở thành *(*(x + (4)) + 3) sẽ trở thành *(*(x + 4) + 3)

3[x[4]] sẽ trở thành *(3 + (*(x + (4)))) sẽ trở thành *(*(x + 4) + 3)

3[4[x]] sẽ trở thành *(3 + (*(4 + (x)))) sẽ trở thành *(*(x + 4) + 3)

Có nghĩa là tất cả chúng đều tương đương.

+0

Trong trường hợp của một mảng đa chiều 'int x [5] [7]' bạn có 'x [y] [z]' được định nghĩa là '* (x + 7 * y + z)'. Và 'x [y]' sẽ trở thành 'x + 7 * y' tức là con trỏ đến phần được chỉ ra. Nhưng tôi tin rằng sự tương đương vẫn giữ, ngay cả khi các biểu thức mở rộng có phần dài hơn. Nếu trình biên dịch chấp nhận mã ở tất cả, đó là. – MvG

1

Có. Trong mỗi trường hợp, x là một mảng phân rã thành một con trỏ và sau đó có số học con trỏ được thực hiện trên nó.