我有这段代码:
#include <iostream>
int main(){
int v1 = 20;
int *p1 = &v1;
int **p2 = &p1;
return 0;
}
我想做的是将一个指针指向另一个指针,在这种情况下它可以正常工作。
我将p1变成一个指向const
的指针,或者是一个指向const
的指针:
int *const p1 = &v1; OR
const int *p1 = &v1;
现在我的代码不能运行。
考虑第一个情况:int *const p1 = &v1;
。
这是我更新后的代码,我认为应该是正确的:
#include <iostream>
int main(){
int v1 = 20;
int *const p1 = &v1;
const int **p2 = &p1;
return 0;
}
让指针本身成为
const
意味着它不能指向另一个对象,但是它所指的对象的值可以被改变。所以如果我想将另一个指针指向先前的指针p1
,我需要确保这个第二个指针不能用于改变p1
的值,因此我将它(p2
)作为指向const
的指针。但它不起作用。错误:无效转换从'int* const*'到'const int**'[-fpermissive]
类似地,第二种情况也失败了。我认为代码应该是正确的:
#include <iostream>
int main(){
int v1 = 20;
const int *p1 = &v1;
int **p2 = &p1;
return 0;
}
将指针指向const意味着指针不能用于更改其所指向的对象的值。但是,指针可以更改自己的值,也就是它可以指向其他对象。由于我可以更改指针的值,因此第二个指针不需要指向const。
错误:从'const int **'转换为'int **'无效 [-fpermissive]
我正在使用GNU CC编译器 我是C ++新手,我迷失了。我想知道如何将指向涉及const的其他指针的指针指向它们。
const int *p1
怎么样?它是正确的吗? - wingerse