In this declaration
char (*__kaboom)[NUM_ELEMS( Port ) ] = NULL;
there is declared a pointer to an array of the type char[NUM_ELEMS( Port ) ]
.
Here is a demonstrative program.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void)
{
char s[] = "Hello";
char ( *p )[sizeof( s )] = NULL;
p = ( char ( * )[sizeof( s )] )malloc( sizeof( char ) * sizeof( s ) );
strcpy( *p, s );
puts( *p );
free( p );
return 0;
}
The program output is
Hello
That is if you have an array like
char s[N];
then a pointer to such an array can be declared like
char ( *p )[N] = &s;
Or you can assign the address of a dynamically allocated memory for an array of the type char[N]
(or char [MAX]
as in your example) to the pointer
p = ( char ( * )[N] ) malloc( N * sizeof( char ) );
Dereferencing the pointer you will get the pointed array (lvalue).