Memory space clarification

Hello, can someone please help me out with the following code:

float __constant (*arr)[2][1];

I need to know where this points to exactly.
My guess would be that arr is a private pointer to a private pointer to the constant memory space. But the NVIDIA implementation just seems to have arr, *arr, **arr all point to the constant memory space.
Which is the correct answer?

Thanks in advance!

Although I’m not a language lawyer I will try to answer your question since nobody has done it yet.

This variable declaration:

float __constant (*arr)[2][1];

means that “arr” is an array of pointers to __constant memory. The pointers themselves are located in private memory (assuming that the variable declaration occurs in kernel scope).

This is not any different from the way that this other variable declaration works:

__constant float *myPtr;

In this case we also have a pointer variable in private memory that points to an address in __constant memory.