C語言中的const

最近在複習C語言,就來說說關於我以前纔開始學C語言很迷糊的一個知識點:const關鍵字
const關鍵字是用來定義只讀變量的,說 const 定義的是變量,但又相當於常量;說它定義的是常量,但又有變量的屬性,所以可以叫常變量。用 const 定義常變量的方法很簡單,就是在定義變量時前面加 const 即可,如下:

const int a=2;//語句1
int const b=5;//語句2

以上代碼中,語句1就等於語句 2,沒有差別。用 const 定義的變量的值是不允許改變的,即不允許給它重新賦值,即使是賦相同的值也不可以。所以說它定義的是隻讀變量。這也就意味着必須在定義的時候就給它賦初值。
在代碼裏,局部變量是存儲在棧中的,靜態變量是存儲在靜態存儲區中,而經過 const 修飾過的變量存儲在內存中的“只讀數據段”中。只讀數據段中存放着常量和只讀變量等不可修改的量。

關於const修飾指針的時候,看下面這段代碼:

int n1=2,n2=5,n3=8;
const int *p1=&n1;//語句3
p1++;//可以
n1=20;//可以
(*p1)=20;//不可以
int const *p2=&n2;//語句4
p2++;//可以
n2=20;//可以
(*p2)=20;//不可以
int *const p3=&n3;//語句5
p3++;//不可以
n3=20;//可以
(*p3)=20;//可以

其實語句3和語句4是一樣的,因爲這兩個裏面const修飾的是同一個。關於const遇見指針,你就記住:const修飾的是什麼就看const的右邊是什麼。語句3和語句4裏面,const修飾的都是*p(代碼裏面就是(*p1)和(*p2)),即你不可以通過指針去改變指針指向的那個變量,但是那個變量本身不是const修飾的,變量本身是可變的,所以語句3中n1=20是合法的,但是(*p1)=20是非法的。語句5裏面const修飾的是p3這個指針,即你不可以改變這個指針的指向,但是這個指針指向的變量是可以被改變的,所以p3++是非法的,而n3=20是可以的。

歡迎交流:)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章