The code snippet below is initializing a vector interrupt table a location 0x00000000, and I quite don't understand the syntax. I understand that g_pfnVectors is an array of constant pointers to void. I don't understand the (void) just before the equal sign? The other statement that I don't understand it the casting of __STACK_TOP. It looks like it's casting it to an unsigned long void pointer to void, but what I don't get is the '&' in front of __STACK_TOP?
#pragma DATA_SECTION(g_pfnVectors, ".intvecs")
void (* const g_pfnVectors[])(void) =
{
(void (*)(void))((unsigned long)&__STACK_TOP),
ResetISR,
NmiSR,
FaultISR,
IntDefaultHandler,
IntDefaultHandler,
IntDefaultHandler,
0,
0,
0,
0,
IntDefaultHandler,
IntDefaultHandler,
0,
};