You pass the array name which will translate to a pointer to the first element. For the function declaration/definition:
Code:
void somefunction(char* foo) { /* ... */ }
void somefunction(char foo[]) { /* ... */ }
I prefer the second form when the semantics of the argument justify you wanting to make it clear the function will perform pointer arithmetics. Otherwise I use the first form (pointer notation). In any case the fist form could probably be considered the correct one since arrays are never passed as arguments. Only pointers.
So, that's the parameters definitions. As for argument passing:
Code:
char bar[3] = { 'a', 'b', 'c' };
somefunction(bar);
As simple as that. Finally, inside the function it's a pointer you are dealing with.