我有以下代码:
#include <iostream>
int main(){
int v1 = 20;
int *p1 = &v1;
int **p2 = &p1;
return 0;
}
我在这里要做的是将一个指针指向另一个指针,在这种情况下它可以正常工作。
我使p1指向一个const
指针或一个指向a的指针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
。
您的第一次重写没有用,因为您尝试将常量指针的地址分配给最终“指针”(即int
)是常量的指针到指针,而不是中间的指针。换句话说,如果C允许
int *const p1 = &v1;
const int **p2 = &p1; // Not allowed
它应该允许这样:
*p2 = &v2; // This would be legal.
但是,这将修改指针p1
,据称该常量是恒定的。
要使第一个重写生效,您需要进行以下更改:
int *const p1 = &v1;
int * const *p2 = &p1;
请注意如何const
从声明之前移到星号之间。现在,您正在创建一个指向int常量指针的指针。
您的第二次重写失败,因为它const
完全降低了-ness。要修复它,请放const
回到声明的开头:
const int *p1 = &v1;
const int **p2 = &p1;
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句