使用带有const的双指针

时间:2016-11-20 11:15:29

标签: c++ pointers const

假设我们有

int *p1;
const int **pp2= &p1;
const int n=13;

//这意味着我们不能使用pp2来修改其地址存储在* pp2中的//变量的值。 * pp2存储某个变量的地址(在本例中为n)

我正在阅读的书-C ++ primer表示以下陈述是完全合法的

*pp2=&n;

我觉得上述陈述违反了上述评论中所写的内容。

请有人帮忙清楚这一点。非常感谢

3 个答案:

答案 0 :(得分:3)

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*的地址。它的类型是const int **pp2= &p1; 。该语句不会对其进行初始化,因此它包含一个未指定的地址(值 it 可以保存)。

pp2

以上尝试创建并分配给变量名int const **。它的类型为p1,语句会尝试为其分配&p1的地址。现在表达式int **的类型为const,分配失败,因为\t资格不匹配。

如您所见,代码与(可能已更正的)语句完全一致。

答案 1 :(得分:2)

首先,请注意您的示例代码本身无法编译(至少在我正在使用的编译器中),因为行int **尝试将const int **分配给{{ 1}} - 看看here

我相信阅读该页面可以帮助您理解您所面临的问题。

答案 2 :(得分:2)

我们可以用一个简单的例子来理解它,我们在下面写下声明,

const int * p;

它说* p是常数而不是p。 p可以存储任何指向常量整数的地址。

同样,const int ** p;

它指向指向常量int的指针。你可以改变p和* p而不是** p。 *在你的情况下,P可以保存指向像& n这样的整数的任何地址,你可以用任何指向常数整数的地址来改变* P.

希望它能解释你更多:: :)