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.

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.

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

Joined: Aug 25, 2006
Posts: 1274

posted

0

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

Joined: Sep 21, 2007
Posts: 21

posted

0

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]