>>44
char *(ptr[255])と解釈されるので後者。
char (*ptr)[255]と書けば前者として解釈される。

後半のことはvoid func(char (*p)[255]);と読めば大体あっている。
正しくはこうしなければならない。
char array1[255];
func(&array1);

typedef char T[255];とすれば、
char *p[255]はT *p;と同じになり、char array1[255];はT array1;になるので、
func(&array1);と言う風に&演算子を使う必要があるんだという説明で納得できる?