Lea*_*th2 19 c const declaration function-signature
码:
const char* const* const* foo(int bar);
Run Code Online (Sandbox Code Playgroud)
我已经看过双锥体,之前也阻止了指针的修改.我第一次见到生命中的三重常数.想知道它的用途是什么.
pmg*_*pmg 18
在你的例子中除了最高级别的间接所有都是const合格的.
const char /* const qualified base level */
*const /* const qualified level 1 */
*const /* const qualified level 2 */
* /* regular level 3 */
foo(int bar);
Run Code Online (Sandbox Code Playgroud)
foo是一个接受int参数并返回常规指针的函数.
指针返回指向一个const合格指针
,这反过来,指向另一个const合格指针
指向const合格char
cma*_*ter 14
如果你有一个多级指针,你有几个指针变量.例:
char*** foo;
Run Code Online (Sandbox Code Playgroud)
像这样访问:
| foo | pointer1 | pointer2 | string |
| ^ | ^ | ^
\___/ \___/ \___/
Run Code Online (Sandbox Code Playgroud)
您可以将内存中四个位置中的每个位置限定为const,如声明中所示
const char *const *const *const foo;
Run Code Online (Sandbox Code Playgroud)
但是,最好避免成为三星级程序员.
哈 - 周围的混乱const.
基本上,如果它限定了一个指针,那么它会立即应用于指针的左侧.例如:
char *const c;
Run Code Online (Sandbox Code Playgroud)
制作c一个只读指针char,而
const char *c;
Run Code Online (Sandbox Code Playgroud)
制作c指向只读的指针char,但您可以更改c指向的位置.
当然,指针及其指向的内容都可以是只读的:
const char *const c;
Run Code Online (Sandbox Code Playgroud)
这使得c只读指针成为只读char.使用前一个声明,您可以修改*c,但不能修改c(即您不能指向其他地方).对于第二个,您可以分配c但不分配,而*c第三个,您不能修改它指向的位置,也不能修改指向的对象.
这延伸到多个间接层.对于您的情况,您可能希望const使用符合条件的匹配指针重新组合关键字.这主要是一个空白问题,但它会是这样的:
const char *const *const *foo(int bar);
Run Code Online (Sandbox Code Playgroud)
这使得foo返回指向只读指针的指针,该指针指向只读的只读指针char.仔细阅读:注意给出这段代码:
const char *const *const *ptr = foo(0);
Run Code Online (Sandbox Code Playgroud)
那么你知道分配给ptr是合法的,但任何其他转让是非法的,也就是,你不能分配到*ptr,**ptr和***ptr.