注:該文主要來源於 網易公開課之《C++ 程序設計入門(上)》課件。數組
在 C 語言標準中,const 修飾的變量稱之爲 只讀變量,spa
在 C++ 語言標準中,const 修飾的變量稱之爲 常量,設計
例:指針
const int ARRAY_LEN = 100;ci
int array[ARRAY_LEN]; //該語句在C++ 編譯器中是可行的,可是在C編譯器中是會報錯的編譯器
以上是 const 在 C 和 C++ 中的差異,下邊主要介紹 const 與指針:編譯
1. 指針的兩個屬性入門
a. 指針變量自己程序設計
b. 指針變量所指向的內容變量
2. 常量指針和指針常量
a. 常量指針(常指針):指針(p)所指向的內容不能經過指針的間接引用(*p)來改變
例:
const int i = 0;
const int* p1 = &i; //指針 p1 的類型是 const int*
*p1 = 10; //error
b. 指針常量:指針自己的內容是一個常量,不能夠改變
例:
int a = 1;
int b = 2;
int* const p = &a; //常量 p2 的類型是 int*
*p2 = 10; //ok, a = 10
p = &b; //error
注:數組名是數組首地址的別名,能夠說 數組名就是一個指針常量,因此 :
int a[] = {1, 2, 3, 4};
a = a + 1; //error
3. 變量、常量和常量指針
a.
int i = 10;
int const *pi = &i;
*pi = 11; //error
i = 11; //ok
上述語句只是說明 pi 指向的地址中所存的內容不能經過 *pi 的方式被改變;
b.
const int ci = 10;
const int* pci = &ci;
*pci = 11; //error
ci = 11; //error
上述語句說明 ci 是一個常量,存放在常量區,不能被改變,pci 指向的地址中所存的內容不能經過 *pci 的方式被改變;
c.
const int ci = 10;
int* pci = &ci; //error
上述語句說明 ci 是一個常量,存放在常量區,不能被改變,也不能經過 *pci 的方式被改變,因此指向 ci 的指針必須是常量指針。
總結:
const int* p; //語句1
int const *p; //語句2
int* const p; //語句3
在前先讀,在前不變
① *(指針) 和 const(常量)誰在前先讀誰;
② * 表明被指的數據,名字表明指針地址;
③ const 在誰的前面誰就不能被改變。
④ 語句1 和語句2 等價