我试图为此搜索答案,但我发现很难找到这种'确切'的例子。我对指针的指针知之甚少,我觉得有更多的东西存在于皮肤之下,而不仅仅是指向某些东西。
那你们怎么翻译呢?
void free(shame_1 * const * const group_1);
如果我把它翻译为const group_1指向shame_1的const指针,我是对的吗?
感谢。
答案 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
如果我把它翻译为const group_1指向shame_1的const指针,我是对的吗?
所以,对我来说,“const group_1指针”位有点怀疑......我认为它读起来更好,因为“group_1是指向...的const指针”或“const指针(称为group_1)到... ”