char const *const *const varName

Pav*_*avi 4 c pointers

我有一个具有以下签名的方法:

size_t advanceToNextRuleEntryRelatedIndex( size_t index, size_t nStrings, char const *const *const strings)
Run Code Online (Sandbox Code Playgroud)

我该如何解释这个:char const *const *const strings

谢谢,帕万。

And*_*rsK 5

char const *const *const strings\n ^    v    ^  v   ^  v\n |    |    |  |   |  |\n +-----    +--+   +--+\n
Run Code Online (Sandbox Code Playgroud)\n

所以基本上这意味着所有指针和指针指向的字符串都是常量,这意味着该函数不能以任何方式修改传递的字符串(除非它被强制转换)。

\n

例如

\n
char* p[] = {"string1","string2"};\xe2\x80\x8d\n
Run Code Online (Sandbox Code Playgroud)\n

它将腐烂成炭**

\n

当传递给

\n
int n = 0; \nadvanceToNextRuleEntryRelatedIndex( n, 2, p);\n
Run Code Online (Sandbox Code Playgroud)\n

  • @ValentinHeinitz 这是不正确的。`const` 指的是左边的类型。只有在“const”左边没有任何内容的特殊情况下,“const”才会引用右边的类型。`int const *p` 是一个指向常量整数的非常量指针。`const int *p` 是一样的。`const int const *p` 有一个多余的 `const`。`int * const p` 是指向非常量整数的常量指针。请参阅[const 的 C 和 C++ 约定](https://en.wikipedia.org/wiki/Const_%28computer_programming%29)。当 `const int` 和 `int const` 都有效时,很容易误解 `const`。 (5认同)