繁体   English   中英

C ++ * const * const

[英]C++ * const *const

我试图搜索答案,但我发现很难找到这种“确切”的例子。 我对指针的指针知之甚少,我觉得有更多的东西存在于皮肤之下,而不仅仅是指针。

那你们怎么翻译呢?

void free(shame_1 * const * const group_1);

如果我把它翻译为const group_1指向shame_1的const指针,我是对的吗?

谢谢。

shame_1 * const * const group_1;

声明一个名为group_1的变量,其类型是一个const指针(你不能改变它指向的位置)到另一个const指针(相同)到一个shame_1类型的对象,你可以实际改变它的值。

所以,例如,你无法编译:

group_1 = nullptr;
*group_1 = nullptr;

但是,您可以这样做:

void f(shame_1& group) {
    //stuff that modifies group
    ...
}
f(**group1);

正如扎金斯特评论的那样,看一下螺旋规则应该可以帮助你理解这种符号。

一般来说,只需从右到左阅读:

void free(shame_1 * const * const group_1);

free接受一个名为group_1的参数,该参数是指向shame_1对象的const指针的const指针。

  • 这里没有关系,但从右到左的主要麻烦是有些人使用T const *而其他人使用const T*它们意味着相同的东西,所以不管你看到T const还是const T你应该读它作为const T 在你的代码中,只有指针才是const

例如:

shame_1 a_shame;
const shame_1* p_a_shame = &a_shame;
free(&p_a_shame);

这里的实用程序很少... free()可以接受一个指向shame_1const指针而没有额外的间接级别,并且仍然可以对shame_1执行所有相同的shame_1 ,所以它只在free()时才有用free()必须将const -pointer-to- const -pointer传递给其他一些函数(最终没有充分的理由让整个混乱)。

您可以将内存使用/关系可视化为:

[a_shame]  <------ [p_a_shame]  <------  [group_1]*
  • 这可能只在CPU寄存器中,但其他可能在优化后也是如此。

如果我把它翻译为const group_1指向shame_1的const指针,我是对的吗?

所以,对我来说,“const group_1指针”位有点怀疑......我认为它更好,因为“group_1是一个指向...的const指针”或“const指针(称为group_1)到...”。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM