指標常量和常量指標詳解

2021-10-06 03:20:19 字數 1800 閱讀 9001

關鍵點:

**形式:

int const* p;  const int* p;
定義:本質是乙個常量,而用指標修飾它。指標常量的值是指標,這個值因為是常量,所以不能被賦值。

關鍵點:

**形式:

int* const p;
定義:指向常量的指標常量就是乙個常量,且它指向的物件也是乙個常量。

關鍵點:

**形式:

const int* const p;
那如何區分這幾類呢? 帶兩個const的肯定是指向常量的常指標,很容易理解,主要是如何區分常量指標和指標常量:

一種方式是看 * 和 const 的排列順序,比如

int const* p;    //const * 即常量指標

const int* p;    //const * 即常量指標

int* const p;    //* const 即指標常量

還一種方式是看const離誰近,即從右往左看,比如

int const* p;    //const修飾的是*p,即*p的內容不可通過p改變,但p不是const,p可以修改,*p不可修改;

const int* p;    //同上

int* const p;    //const修飾的是p,p是指標,p指向的位址不能修改,p不能修改,但*p可以修改;

例項

//-------常量指標-------

const int *p1 = &a;

a = 300; //ok,仍然可以通過原來的宣告修改值,

//*p1 = 56; //error,*p1是const int的,不可修改,即常量指標不可修改其指向位址

p1 = &b; //ok,指標還可以指向別處,因為指標只是個變數,可以隨意指向;

//-------指標常量-------//

int* const p2 = &a;

a = 500; //ok,仍然可以通過原來的宣告修改值,

*p2 = 400; //ok,指標是常量,指向的位址不可以變化,但是指向的位址所對應的內容可以變化

//p2 = &b; //error,因為p2是const 指標,因此不能改變p2指向的內容

//-------指向常量的常量指標-------//

const int* const p3 = &a;

//*p3 = 1; //error

//p3 = &b; //error

a = 5000; //ok,仍然可以通過原來的宣告修改值

在實際應用中,常量指標要比指標常量用的多,比如常量指標經常用在函式傳參中,以避免函式內部修改內容。

size_t strlen(const char* src); //常量指標,src的值不可改變;

char a = "hello";

char b = "world";

size_t a1 = strlen(a);

size_t b1 = strlen(b);

雖然a、b是可以修改的,但是可以保證在strlen函式內部不會修改a、b的內容。

指標 常量指標和指標常量

const關鍵字宣告乙個常量,常量宣告後不能修改。類似的,我們可以宣告常量指標 double radius 5 double const pvalue radius pvalue 4 可以修改其中pvalue是乙個常量指標,其宣告和初始化必須在同一條語句中,後面的程式不能為其賦予新的位址。注意,雖然...

常量指標 和 指標常量

在c 的學習中,有人經常搞不清楚 常量指標 和 指標常量 這兩個概念。其實簡單一點講,常量指標 所指向的位址上的資料是常量,而 指標常量 所指向的位址是常量,位址上面的資料是可以變化的。常量指標,表述為 是常量的指標 它首先應該是乙個指標。指標常量,表述為 是指標的常量 它首先應該是乙個常量。指標常...

常量指標和指標常量

定義 具有只能夠讀取記憶體中資料,卻不能夠修改記憶體中資料的屬性的指標,稱為指向常量的指標,簡稱常量指標。宣告 const int p int const p 注 可以將乙個常量的位址賦值給乙個對應型別的常量指標,因為常量指標不能夠通過指標修改內粗資料。只能防止通過指標引用修改記憶體中的資料,並不保...