Pointers and arrays have a special relationship in C
Language.Name of an array is constant pointer which point first element of
array and an array is represented by a variable that is associated with the
address of its first storage location. A pointer is also the address of a
storage location with a defined type, so name permits the use of the array [ ]
index notation with both pointer variables and array variables. For example,
the following two references in C language are equivalent in meaning:
Q = &a[0]; trace(Q[2]);
trace(Q[2]);