如何在C ++中定义一个const指针数组?

时间:2018-06-05 12:48:10

标签: c++ arrays c++11 pointers const

有没有办法定义一个指针数组,以便任何指针都是const?

例如,可以定义char** array以使array[0]为const且array[1]为const等,但array为非const且{{1}是非const?

2 个答案:

答案 0 :(得分:21)

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,但对于使用std::vectorsmart pointers的现代C ++来说更合适。

答案 1 :(得分:14)

对于此类请求,您可以使用魔术工具cdecl(也可用作网络用户界面here):

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