C ++: значение const char * const *

В одной из программ на C ++ я видел прототип функции:int Classifier::command(int argc, const char*const* argv)

Что значитconst char*const* argv имею в виду? Это так же, какconst char* argv[]? Does const char** argv тоже значит то же самое?

 Roman Starkov05 апр. 2012 г., 15:10
@LuchianGrigore да, понял
 Luchian Grigore05 апр. 2012 г., 15:09
 Peter Wood05 апр. 2012 г., 15:51
Читайте (в основном) справа налево, указатель на константный указатель на (константный символ).

Ответы на вопрос(4)

ОтC ++ Super-FAQ:

Read the pointer declarations right-to-left.

const X* p means "p points to an X that is const": the X object can't be changed via p. X* const p means "p is a const pointer to an X that is non-const": you can't change the pointer p itself, but you can change the X object via p. const X* const p means "p is a const pointer to an X that is const": you can't change the pointer p itself, nor can you change the X object via p.

And, oh yea, did I mention to read your pointer declarations right-to-left?

const char * const * такой же какchar const * const *: (неконстантный) указатель на константный указатель на константный символ.

const char * такой же какchar const *: (неконстантный) указатель на константный символ.

const char * * такой же какchar const * *: (неконстантный) указатель на (неконстантный) указатель на константный символ.

Решение Вопроса

Нет, это не то же самое, чтоconst char *argv[],const запрещает изменение значения разыменования на определенном уровне разыменования:

**argv = x; // not allowed because of the first const
*argv = y; // not allowed because of the second const
argv = z; // allowed because no const appears right next to the argv identifier

const char*const* argv означает "указатель на константу" указатель на константуchar& Quot ;. Это не "то же самое" какconst char *argv[], но это совместимо в некоторой степени:

void foo(const char *const *argv);

void bar(const char **argv)
{
    foo(argv);
}

компилирует просто отлично. (Обратное не будет компилироваться безconst_cast.)

Указатель, который не изменяется на строку, которая не изменяется:

const char* aString ="testString";

aString[0] = 'x';   // invaliv since the content is const
aString = "anotherTestString"; //ok, since th content doesn't change

const char const* bString = "testString";
bString [0] = 'x'; still invalid
bString = "yet another string"; // now invalid since the pointer now too is const and may not be changed.

Ваш ответ на вопрос