to determine the dimentions you would need some other parameter(s) but look at the ... ability. Not sure if you really want to do this or not though. However, if you want to get tricky, you could encode the first n bits of the pointer coming in and always cast it as a void pointer. The actual data would come after the encoding.
void processArray(void* ptr)
{
char* encPtr = (char*)ptr;
int dim1 = *char;
int dim2 = *(char+1);
int dim3 = *(char+2);
etc...
if char* is not large enough for your params, move to short*... if 16 bits is not enough, move to int*. Designate an offset to process the array as. The first dimention that is a zero lets you determine the actual dimentions.
I hope that made sense... it was just a thought but it would allow for a generic multi-dimentional array to be passed in.
Matt