Во-первых, вы должны дать ему атрибут const
:
char const * a[] = { "qwe", "zxc" };
изменение строковых литералов приведет к неопределенному поведению. Тогда, чтобы ответить на ваш вопрос, хотя бы частично.
Помимо подхода объявления его extern
, как и в предыдущих ответах, первый, не рекомендуемый, способ продолжить это объявить ваш массив static
. Затем у вас будет копия массива в каждом модуле компиляции, который использует этот массив. Если вы не хотите изменять содержимое массивов (указатели указывают на разные строки), это нормально, но немного взрывает ваш код.
Если вам просто нужно сослаться на строки в области действия функции, и у вас есть компилятор, совместимый с C99, вы можете использовать составные литералы :
#define MYARRAY ((char const*const[]){ "qwe", "zxc" })
Затем вы можете использовать readonly , как и следовало ожидать, что-то вроде MYARRAY[1]
, и любой приличный компилятор должен быть в состоянии оптимизировать такой доступ.