Как определить массив константных указателей в C++?

Есть ли способ определить массив указателей, чтобы любой указатель был const?

Например, может ли быть определен array[0] char** array, поэтому array[0] является константой, а array[1] является константой и т.д., Но array является константой, а array[j][i] является константой?

Ответы

Ответ 1

char* const * pointer; , затем

pointer       -> non-const pointer to const pointer to non-const char (char* const *)
pointer[0]    -> const pointer to non-const char (char* const)
pointer[0][0] -> non-const char

Если вам нужен массив, то char* const array[42] = {... }; ,

Если вы не знаете размер массива во время компиляции и должны выделять массив во время выполнения, вы можете использовать указатель, тогда

int n = ...;
char* const * pointer = new char* const [n] { ... };
...
delete[] pointer;

Как вы можете видеть, вам необходимо выполнить распределение и освобождение вручную. Даже вы сказали, что вам не нужен std::vector но для mordern C++ использование std::vector или умных указателей более уместно.

Ответ 2

Для такого запроса вы можете использовать волшебный инструмент cdecl (также доступный как веб-интерфейс здесь):

$ cdecl -+ %c++ mode
Type 'help' or '?' for help
cdecl> declare x as array of const pointer to char
char * const x[]
cdecl>