It's just setting each element in the array to 0. Trace it all on paper.
Assuming the call is something like this:
Code:
int array[10];
...
Mystery(array,10);
First few iterations you'll have this:
Code:
Mystery is called: A points at array[0], size = 10
(size > 0) is true.
A[0] = 0; This means array[0] = 0 in main()
Mystery is then called with A + 1 and size - 1.
Code:
Mystery is called: A points to array[1], size = 9
(size > 0) is true
A[0] = 0; array[1] = 0 in main()
Mystery is then called with A + 1 and size - 1
Code:
Mystery is called: A points to array[2], size = 8
(size > 0) is true
A[0] = 0; array[2] = 0 in main()
Mystery is then called with A + 1 and size - 1
A is just really a pointer. It's not really an array, although it can behave just like one in many ways. It's important to realize that just because A[0] is set to 0, doesn't mean that array[0] is what will be changed.