c語言常量指針賦值給變量指針導致警告



常量指針定義:常量是形容詞,指針是名詞,以指針為中心的一個偏正結構短語。這樣看,常量指針本質是指針,常量修飾它,表示這個指針乃是一個指向常量的指針。指針指向的對象是常量,那么這個對象不能被更改。常量指針的使用要注意,指針指向的對象不能通過這個指針來修改,可是仍然可以通過原來的聲明修改,也就是說常量指針可以被賦值為變量的地址,之所以叫做常量指針,是限制了通過這個指針修改變量的值。

在C/C++中,常量指針是這樣聲明的:

1)const int *p;

2)int const *p;

例子:

int a = 5;

const int b = 8;

const int *c = &a; // 這是合法的,非法的是對c的使用

*c = 6; // 非法,但可以這樣修改c指向的對象的值:a = 6;

const int *d = &b; // b是常量,d可以指向b,d被賦值為b的地址是合法的

我在這里想重點說明的是,在一個函數的定義里,將一個常量指針賦值給變量指針,然后通過這個變量指針是可以修改常量指針指向的對象的。

但是,編譯器會給出一個警告:warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  p=a;
   ^
void testp(const int *a,int n)
{
  int *p;
  p=a;
  p[0]=12;     //修改了數組a[0]的值,而編譯器只是給了一個警告,所以,警告也要足夠重視。
  a[0]=12;     //直接修改a,編譯器會報錯,因為定義了const屬性。
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM