常量指针(不是指针常量)不能赋值给普通指针


#include<iostream>
using namespace std;
int main(){
int *pr;
const int *prr;
pr=prr;
return 0;
}

编译时出错:
C:\Users\Administrator\c++\Cpp9.cpp(6) : error C2440: '=' : cannot convert from 'const int *' to 'int *'
Conversion loses qualifiers
执行 cl.exe 时出错.
这是怎么回事 呀 ,是不是常量指针不能赋值给普通指针呀?

回答:

const 右侧是int,也就是说声明int是个常量,常量不可修改。

那么prr是个指向整数常量的指针。

假设

int a;

prr=&a;

 

如果允许pr=prr,那么通过pr指针就可以修改a,比如 *pr=10;

这违背prr的定义,为防止绕道修改a值而出现错误乱,编译器就会提示错误。

 

如果你只是想限定prr本身不可修改,可以这么写

1
2
3
4
int  a;
int  *pr;
int   const  prr=&a;
pr=prr;

将const写在prr前面,使得限定prr本身,也就是说prr是个整数的指针常量,prr的值除了定义时初始化,其他地方不能修改(prr的指向不可改变),但prr指向的地址中的值还是可以修改的。

 

这样pr=prr,就不会出现冲突,因为他们都指向一个同类型地址,且pr是个普通指针变量,所以可以赋值。


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM