Указатель на массив (точнее на первый элемент массива, если вы инициализируете его массивом) может быть объявлен как
static const char city_names[1000][4][50];
const char ( *p )[4][50] = city_names;
Таким образом, объявление функции, которое возвращает такой указатель, может выглядит как
const char ( *f( /* some parameters */ ) )[4][50];
А внутри функции вы можете просто написать
return city_names;
То есть, если у вас есть массив, объявленный как
T a[N1][N2][N3];
, где T - это некоторое спецификатор типа и N1, N2, N3 являются константами, которые определяют размеры массива, тогда вы можете переписать объявление как
T ( a[N1] )[N2][N3];
Чтобы получить указатель на тип элемента массива, просто подставьте запись (a [ N1]) для объявления указателя типа
T ( *p )[N2][N3] = a;