[英]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_1
的const
指针而没有额外的间接级别,并且仍然可以对shame_1
执行所有相同的shame_1
,所以它只在free()
时才有用free()
必须将const
-pointer-to- const
-pointer传递给其他一些函数(最终没有充分的理由让整个混乱)。
您可以将内存使用/关系可视化为:
[a_shame] <------ [p_a_shame] <------ [group_1]*
如果我把它翻译为const group_1指向shame_1的const指针,我是对的吗?
所以,对我来说,“const group_1指针”位有点怀疑......我认为它更好,因为“group_1是一个指向...的const指针”或“const指针(称为group_1)到...”。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.