Это не имеет ничего общего с заголовочными файлами.Вы не можете создать файл .c и вставить в него код, подобный следующему:
char *i[2];
i[0] = "abc";
В C весь код, кроме определений и инициализаций, должен быть внутри функций, и ваш второй оператор не является ни одним из них - этоприсваивание.
Инициализация для вашего массива будет выглядеть следующим образом:
char *i[2] = {"foo","bar"};
И это может быть помещено в файл заголовка, но приведет к множественным ошибкам определения, если заголовок будет использован вчем одна единица перевода.