常量指針(不是指針常量)不能賦值給普通指針


#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