Well, first you have to understand that this declares a function named summate having a parameter of type pointer to float, and with a return type of float:
Code:
float summate(float z[]);
Yes, you see what you might recognise as array notation syntax, but here it declares a pointer, not an array.

This is the same thing, except that it uses what you might recognise as pointer notation syntax, and omits the parameter name:
Code:
float summate(float*);
Since you're only declaring the function without defining it at this point, omitting the parameter name is perfectly fine.

This is also the same thing, except that it goes back to what you might recognise as array notation syntax, but omitting the parameter name, which as before is permitted:
Code:
float summate(float[]);
This comment here is absolutely correct because in this context, the array would be implicitly converted to a pointer to its first element, which is of course another way of saying &a[0]:
Code:
result = summate(&a[0]); // could just be summate(a);