指向變量的常指針與指向常變量的指針詳細解析
更新時間:2013年10月14日 10:33:46 作者:
剛接觸到指針時,關于指向變量的常指針和指向常變量的指針容易混淆,所以整理下,希望能夠幫助自己也幫助到大家
常(量)指針
常指針就是我們說的指向常量的指針,顧名思義,它是用來指向常量的。
用常指針指向常變量
實際上,C++規(guī)定只能用指向常變量的指針指向常變量,普通指針指向它就會報錯,原因也很容易理解,我們用普通指針指向常變量之后,有可能就會進行改變常變量數值的操作,這樣做是不被允許的。
常指針的定義方法:
復制代碼 代碼如下:
const 類型名 * 常指針名;
下面是它的一個簡單的使用示例:
程序1.1.1
復制代碼 代碼如下:
#include<iostream>
using namespace std;
int main()
{
const int i=5;//定義一個int型常變量
const int *p;//定義一個int型常指針
p=&i;//用常指針指向常變量
cout<<*p<<endl;
return 0;
}
運行結果:

如果我們使用普通指針變量來指向常變量:
程序1.1.2
復制代碼 代碼如下:
#include<iostream>
using namespace std;
int main()
{
const int i=5;//定義一個常變量
int *p;//定義了一個int型指針
p=&i;//使用一般的指針指向常變量
cout<<*p<<endl;
return 0;
}
就會報錯:

用常指針指向一般變量(非const型變量)
用常指針也是可以指向一般變量的,不過不可以通過常指針來更改一般變量的值,但是可以通過一般變量的變量名來修改變量的值。
下面看一個示例:
程序1.2.1
復制代碼 代碼如下:
#include<iostream>
using namespace std;
int main()
{
int i=5;//定義一個一般變量
const int *p;//定義了一個常指針
p=&i;//使用常指針指向一般變量
cout<<*p<<endl;
i=10;//通過一般變量的變量名來修改值
cout<<*p<<endl;
return 0;
}
運行結果:
如果我們使用常指針來修改一般變量的值:
復制代碼 代碼如下:
*p=10;
就會報錯:

小結:常指針可以指向常變量和一般變量,但是都不能通過指針改變它指向的變量的值。
指針常量
指針常量是指的指針本身就是一個常變量,一經賦初值就不可以被更改。
上面已經說過,只有常指針才可以指向常變量,所以指針常量只可以指向一般變量,而且一旦賦給了初值,就不可以再更改。
定義方法:
復制代碼 代碼如下:
類型名 * const 指針常量名=變量地址;
因為指針是常變量所以它在定義的時候就應該賦初值。
一個程序示例:
程序2.1
復制代碼 代碼如下:
#include<iostream>
using namespace std;
int main()
{
int i=5;//定義一個一般變量
int * const p=&i;//定義了一個指針常量
cout<<*p<<endl;
*p=30;//通過指針來改變指向的變量的值
cout<<*p<<endl;
return 0;
}
運行結果:

