2011-11-13 14 views

Odpowiedz

13

x[y] jest zdefiniowana jako *(x + (y))

x[y][z] stanie *(*(x + (y)) + z)

x[y[z]] stanie *(x + (*(y + (z))))


x[4][3] stanie *(*(x + (4)) + 3) staną *(*(x + 4) + 3)

3[x[4]] staną *(3 + (*(x + (4)))) staną *(*(x + 4) + 3)

3[4[x]] staną *(3 + (*(4 + (x)))) staną *(*(x + 4) + 3)

Czyli wszystkie są równoważne.

+0

W przypadku tablicy wielowymiarowej 'int x [5] [7]' miałbyś 'x [y] [z]' zdefiniowany jako '* (x + 7 * y + z)'. A 'x [y]' stałoby się 'x + 7 * y', tj. Wskaźnikiem do wskazanego plasterka. Sądzę jednak, że ekwiwalenty nadal istnieją, nawet jeśli rozszerzone wyrażenia są nieco dłuższe. Jeśli kompilator w ogóle akceptuje kod, to znaczy. – MvG

1

Tak. W każdym przypadku x jest tablicą, która rozpada się na wskaźnik, a następnie wykonuje na niej arytmetykę wskaźnika.

Powiązane problemy