Указатели и массивы и совместимы только в статической области видимости. В глобальной области видимости указатель и массив не одинаковы, смешивание двух приведет к неопределенному поведению. Так что, на мой взгляд, предупреждение верно.
Попробуйте поставить:
extern char *array1[3] =
{
"hello",
"world",
"there."
};
в одном модуле и:
extern char **array1;
struct locator_t
{
char **t;
int len;
} locator[2] =
{
{
array1,
10
}
};
в другом, скомпилировать и связать. (Я не пробовал это ...) Я ожидал, что что-то пойдет не так ...