2012-04-05 4 views
11

のconst char型*のCONSTの意味、私は、関数のプロトタイプを見た:int Classifier::command(int argc, const char*const* argv)C++:C++プログラムの一つで*

const char*const* argvは何を意味するのでしょうか? const char* argv[]と同じですか? const char** argvも同じ意味ですか? C++ FAQ Liteから

+7

http://cdecl.org/ –

+1

@LuchianGrigore yoot、got –

+1

(主に)右から左へ、constポインタへのポインタ(const char) 。 –

答えて

5

いいえ、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 
3

フレッドのconst * constのpは、「pは一定のフレッドへの定数ポインタである」意味:あなたはポインタp自体を変更することはできません、またあなたがたp経由フレッドオブジェクトを変更することができます。

const char * const *char const * const *と同じです:const charへのconstポインタへの(非const)ポインタ。

const char *は、char const *と同じです:const charへの(非const)ポインタ。

const char * *は、char const * *と同じです:(非const)const charへのポインタへの(非const)ポインタへのポインタ。

3

変化しない文字列に変更されないポインタ:

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. 
3

const char*const* argv「は定数ポインタへのポインタを意味します定数char "に設定します。それはconst char *argv[]として、「同じ」ではないのですが、それはある程度互換性があります。

void foo(const char *const *argv); 

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

はうまくコンパイルします。 (逆は、const_castを除いてコンパイルされません)

関連する問題