You don't need a temporary variable for "p" -- if the task is to write a function, you must have a pointer with the address of the start of the array, not an array variable as such. And yeah, you need some way to tell the length.
Yeah, I suppose you'd need 1 temporary variable. Your solution doesn't work either, though: doing the freshman XOR trick some arbitrary fixed number of times just reduces to the XOR trick, which is plainly not what the task asked.
Well, obviously the XOR swap works. But how do you use that to reverse an array of variable size? (i.e. where "last" isn't known at compile-time, so the number of swaps isn't known in advance).
An array can be variably-sized in C (C99, that is). And thank you, I know the difference between an array and a pointer. You just seem to have arbitrarily interpreted the question to limit it to C89 and a fixed-size array in order to make your solution work.
This has nothing to do with it being statically sized or variably sized. You have to know what size it is when you are going to reverse it. The solution presented works as long as the programmer knows what the size is.
If you want to posit any kind of sane question, then you can have a sane solution.
Well, suppose I have an array `A' of size `len'. How would you write an algorithm that reverses that array in place, without using any temporary variables, and that works for arbitrary values of A and len? I think the answer is "you can't". You can't claim to have a solution for the problem if it only works for a fixed input, and if the solution itself would be different for different inputs.