天天看點

C++ Primer Plus學習筆記之const修飾指針C++ Primer Plus學習筆記之const修飾指針

C++ Primer Plus學習筆記之const修飾指針

首先來談一下const與define的差別,大家都知道兩者都可以定義常量,但是define有一個明顯的缺陷:沒有類型資訊; 例如:

#define PI 3.14
const float PI=3.14
           

第一個用define定義的PI是double類型的; 第二個用const定義的PI是有明顯的類型float ; 是以說,這樣可以避免一些隐藏的問題,例如進行宏替換的時候可能會導緻類型轉換; 下面步入正題: 一:指向常量的指針 指向常量的指針:将指針聲明前加上const,使指向的對象為常量,而不是指針為常量; 變量聲明的方法:

const int *p;
           

注意:該類指針可以指向常量也可以指向變量;隻是從指針的角度而言,它所指向的是常量,通過該指針不能修改它所指向的資料。

int a=1,b=2;
const int c=3;
const int *p;
p=&a;
*p=10;//錯誤,不能修改它所指向的資料
a=10;
p=&b;
*p=20;//錯誤,不能修改它所指向的資料
b=20;
p=&c;
*p=30;//錯誤,不能修改它所指向的資料
c=100;//錯誤,修改常量
           

二:常指針 常指針:要把指針本身,而不是指向的對象聲明為常量,采用運算符*const;該指針稱為常指針,并且必須初始化。 變量聲明的方法:

int *const p;
           

通過它可以修改指向的資料;指針本身為常量,一旦初始化後,就不能讓它指向其他的資料了。該類指針隻能指向變量,不能指向常量;

int a=1,b=2;
const int c=3;
int *const p=&a;
*p=10;
p=&b;//錯誤,不能指向其他的資料
*p=20;
int *const pc=&c;//錯誤,不能指向常量
           

三:指向常量的常指針 要使兩個目标都為常量,二者都要聲明為const;該指針稱為指向常量的常指針,并且必須初始化;該類指針可以指向常量,也可以指向變 量;但通過該指針不能修改它所指向的資料;初始化後,也不能讓它指向其他的資料;

int a=1,b=2;
const int c=3;
const int *const p=&a;
*p=10;//錯誤,不能修改指向的資料
p=&b;//錯誤,不能指向其他的資料
const int *const pc=&c;
           

繼續閱讀