簡體   English   中英

C++:const char*const*的含義

[英]C++ : Meaning of const char*const*

在其中一個C++的程序中,看到了一個function的原型: int Classifier::command(int argc, const char*const* argv)

const char*const* argv是什么意思? 它與const char* argv[]相同嗎? const char** argv也是這個意思嗎?

來自C++超級FAQ

從右到左閱讀指針聲明。

  • const X* p表示“ p指向一個Xconst ”: X object 不能通過p改變。
  • X* const p的意思是“ p是一個指向non-constXconst指針”:您不能更改指針p本身,但可以通過p更改X object 。
  • const X* const p的意思是“p 是指向constXconst指針”:您不能更改指針p本身,也不能通過p更改X object。

而且,哦,是的,我有沒有提到從右到左閱讀您的指針聲明?

const char * const *char const * const *相同:指向 const 的(非 const)指針,指向 const char。

const char *char const *相同:指向 const char 的(非常量)指針。

const char * *char const * *相同:指向 const char 的(非常量)指針的(非常量)指針。

不,它與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的常量指針”。 它與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.

常量字符*常量*一個;

基本上說:a 是指向不可更改的 const char 指針的指針。

所以這將是一個有效的代碼:const const const char*const*const* a;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM