Edit: My initial answer was so badly wrong that I'm trying again.
Expression.ArrayAccess returns an
IndexExpression which can be used to get or set the value of an element in an array.
Expression.ArrayIndex returns either a
BinaryExpression or a
MethodCallExpression depending on the rank (number of dimensions) of the provided array expression. The returned expression can then be used to read a value from the array.
ArrayAccess gives you an expression that provides both read and write access to the array data, while
ArrayIndex gives you read access only.