ANSWERS TO EXERCISES ON POINTERS AND ARRAYS

 1. x = {0, 4, 2, 3, 1}.  The memory address of the 0th array
    element of a is passed to the function.  

 2. x = {0, 4, 2, 3, 1}.  Address arithmetic says that x+1 is the
    memory address of array element 1 and x+4 is a pointer to array
    element 4.

 3. 0 1 2  Same as print3(x).
    2 3 4  Same as print3(x+2). Just like array starts at element 2.
    4 ? ?  Out of bounds access.

 4. Efficiency.  Arrays can have billions of elements.  The overhead
    of copying them each time you call a function would be overwhelming.
    It also means that you can pass a "sub-array" to a function for
    processing as in the previous question.

 5. None. It is a matter of style. Beginners usually prefer the first.