Array expression evaluation

ahmed yehia
Ranch Hand
Posts: 424
• 1
Source: Enthuware v4

In an array access, the expression to the left of the brackets appears to be fully evaluated before any part of the expression within the brackets is evaluated.

I m not getting this concept.

Burkhard Hassel
Ranch Hand
Posts: 1274
• 2
Howdy!
What is
a [ (a = b)[3] ] ?

It is the (a = b)[3] -th element of array a.

With a = b, the variable a now points to the array object of the second line (where also b points to).
so (a = b)[3]
points to the 3 rd element of the b array. The zero.

The total expression
a [ (a = b)[3] ]
is the same as
a [0]

But didn't we reassign a to b in the inner part?
Yes, but:

In an array access, the expression to the left of the brackets appears to be fully evaluated before any part of the expression within the brackets is evaluated.
.
The chosing of array a has been done before the reassignment inside the brackets. Therefore the one and not the two is printed.

By the way, after that line the reassignment will be valid for following code.

prints
1
1
2

Yours,
Bu.

Gautam Pandey
Greenhorn
Posts: 21

I agree with the above explanation , but when i first look at the code , i took it this way
(a = b)[3] ==> a[3]=b[3] ==> a[3]=0 ==> 0
so a [ (a = b)[3] ] ==> a[0]

Burkhard Hassel
Ranch Hand
Posts: 1274
Originally posted by Gautam Pandey:

I agree with the above explanation , but when i first look at the code , i took it this way
(a = b)[3] ==> a[3]=b[3] ==> a[3]=0 ==> 0
so a [ (a = b)[3] ] ==> a[0]

(a = b)[3] ==> a[3]=b[3]
No, here is the mistake. You don't reassign individual elements of the arrays with (a=b)[3]

Yours,
Bu.

Gautam Pandey
Greenhorn
Posts: 21
Got it !
The (a=b) is evaluated first then the index [3] is applied to the new reference array (now a is pointing to b) so now it's a[3] which is actually b[3]

Kumar Khiani
Ranch Hand
Posts: 40
Thanks for the wonderful explanation