web-dev-qa-db-ja.com

C ++でconstポインターの配列を定義する方法は?

ポインターがconstになるようにポインターの配列を定義する方法はありますか?

たとえば、char** array定義されるのでarray[0]はconstであり、array[1]はconstなどですが、arrayは非constであり、array[j][i]は非定数ですか?

21
StackUser

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 または スマートポインタ がより適切です。

21
songyuanyao

このようなリクエストには、マジックツールcdeclを使用できます(Web UIとしても利用可能 here ):

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