C++ 使用带有常量的双指针
假设我们有C++ 使用带有常量的双指针,c++,pointers,constants,C++,Pointers,Constants,假设我们有 int *p1; const int **pp2= &p1; const int n=13; //这意味着我们不能使用pp2修改地址存储在*pp2中的//变量的值。 *pp2存储某个变量的地址(在下面的示例中为n) 我正在读的《C++入门》一书说,以下声明是完全合法的 *pp2=&n; 我认为上述声明违反了上述评论中的内容 谁能帮我弄清楚这件事。非常感谢类型&n为int const* *pp2的类型是int const* 在本例中,const限定指针对象,而不是指
int *p1;
const int **pp2= &p1;
const int n=13;
//这意味着我们不能使用pp2修改地址存储在*pp2中的//变量的值。
*pp2存储某个变量的地址(在下面的示例中为n)
我正在读的《C++入门》一书说,以下声明是完全合法的
*pp2=&n;
我认为上述声明违反了上述评论中的内容
谁能帮我弄清楚这件事。非常感谢类型
&n
为int const*
*pp2
的类型是int const*
在本例中,const
限定指针对象,而不是指针
因此,将一个分配给另一个是完全有效的。你引用的评论可能是错误的,也许应该说:
// Which means we can't use **pp2 to modify the value of the
// variable whose address is stored in *pp2.
详细说明:
int *p1;
上面创建了一个名为p1
的变量,该变量可以存储int
的地址。它的类型是int*
。此语句不初始化它,因此它包含一个未指定的地址(它可以包含的值)
上面尝试创建并分配给变量名pp2
。它的类型是int const**
,语句试图为它分配p1
的地址。现在表达式&p1
的类型为int**
,赋值失败,因为const
条件不匹配
如您所见,代码与(可能已更正的)语句完全一致。首先,请注意,示例代码本身无法编译(至少在我使用的编译器中是如此),因为行
const int**pp2=&p1代码>尝试将int**
分配给const int**
-查看
我相信阅读这一页也会帮助你理解你所面临的问题。用一个简单的例子来理解它会有帮助。当您在下面填写声明时:
const int *p;
它说,*p
是常数,而不是p
p
可以存储指向常量整数的任何地址
类似地,const int**p
表示指向常量int的指针。您可以更改p
和*p
,但不能更改**p
*p
可以保存指向常量整数的任何地址,如您的案例中的&n
,您可以使用指向常量整数的任何地址更改*p
。已编辑。谢谢你的回答。请你再澄清一下好吗。我是cpp的新手。再次感谢大家对这个话题的广泛讨论。非常感谢。解释得很好。
const int *p;