C ++ * const * const

时间:2014-02-13 07:01:10

标签: c++ pointers const

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

那你们怎么翻译呢?

void free(shame_1 * const * const group_1);

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

感谢。

2 个答案:

答案 0 :(得分:5)

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);

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

答案 1 :(得分:3)

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

void free(shame_1 * const * const group_1);

free采用名为group_1的参数,该参数是指向const对象的const指针的shame_1指针。

  • 这里不相关,但从右到左的主要麻烦是,有些人使用T const *而其他人使用const T*,他们的意思相同,所以无论你看到{{1} 1}}或T const您应该将其视为const T。在您的代码中,无论如何只有指针const T

例如:

const

这个实用程序很少...... shame_1 a_shame; const shame_1* p_a_shame = &a_shame; free(&p_a_shame); 可以接受free()指向const的指针而没有额外的间接级别,并且仍然可以完成所有操作与shame_1相同的内容,因此仅当shame_1必须将free() - 指针指向 - const指针传递给其他某个函数时才有用(最终有没有充分的理由整个混乱)。

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

const
  • 这可能只在CPU寄存器中,但其他可能在优化后也是如此。
  

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

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