The __far keyword does not appear in the context of the * type constructor in the declaration of an array parameter, as shown:
void my_func (char a[37]);
Such a declaration specifies a pointer argument. This is equal to:
void my_func (char *a);
There are two possible uses when declaring such an argument to a __far pointer:
void my_func (char a[37] __far);
or alternately
void my_func (char *__far a);
In the context of the [ ] type constructor in a direct parameter declaration, the __far keyword always affects the first dimension of the array to its left. In the following declaration, parameter a has type " __far pointer to array of 5 __far pointers to char":
void my_func (char *__far a[][5] __far);