代码:
const char* const* const* foo(int bar);
我之前也看到过双重常量,它也阻止了指针的修改。我一生中第一次看到三重常量。想知道它的用途是什么。
代码:
const char* const* const* foo(int bar);
我之前也看到过双重常量,它也阻止了指针的修改。我一生中第一次看到三重常量。想知道它的用途是什么。
在您的示例中,除了顶级间接之外,所有的都是const
合格的。
const char /* const qualified base level */
*const /* const qualified level 1 */
*const /* const qualified level 2 */
* /* regular level 3 */
foo(int bar);
foo
是一个接受int
参数并返回常规指针的函数。
它返回的指针指向一个const
限定指针
,该指针又指向另一个
指向限定的const
限定指针const
char
如果你有一个多级指针,你有几个指针变量。例子:
char*** foo;
像这样访问:
| foo | pointer1 | pointer2 | string |
| ^ | ^ | ^
\___/ \___/ \___/
您可以将内存中的四个位置中的每一个都限定为 is const
,如在声明中一样
const char *const *const *const foo;
但是,最好避免成为三星级程序员。
哈- 周围的混乱const
。
基本上,如果它限定一个指针,那么它适用于紧靠其左侧的指针。例如:
char *const c;
生成一个c
指向 的只读指针char
,而
const char *c;
创建c
一个指向只读的指针char
,但您可以更改c
指向的位置。
当然,指针及其指向的内容都可以设为只读:
const char *const c;
这使c
只读指针指向只读的char
. 使用前一个声明,您可以修改*c
,但不能修改c
(即您不能使其指向其他地方)。使用第二个,您可以分配给c
但不能分配给*c
,使用第三个,您不能修改它指向的位置,也不能修改指向的对象。
这扩展到多个间接级别。对于您的情况,您可能希望const
使用符合条件的匹配指针重新组合关键字。这主要是一个空格问题,但它会是这样的:
const char *const *const *foo(int bar);
这使得foo
返回一个指向只读指针的指针,指向一个只读指针的只读指针char
。仔细阅读:注意给定这段代码:
const char *const *const *ptr = foo(0);
然后你知道赋值ptr
是合法的,但任何其他赋值都是非法的,即你不能赋值给*ptr
、**ptr
和***ptr
。
foo
返回pointer
指向 a 的 aconstant pointer
指向另一个constant pointer
指向 a 的 a constant char
。看看螺旋法则。
int bar;
const char* const* const* ptr = foo(bar);
所以基本上你不能改变任何*ptr
or**ptr
或***ptr
。