1、指針和const
我們知道const
關鍵字修飾的是不可變量,將它和指針一起使用,會有很多微妙的地方。
關于使用const
來修飾指針,有兩種不同的方式。第一種是讓指針指向一個常量對象,這樣可以防止使用該指針進行修改指向的值。第二種則是將指針本身聲明為常量,可以防止改變指針指向的位置。下面我們來看下細節。
1.1 指向常量的指針
首先是指向常量的指針,含義是指針的類型是一個常量類型。所以寫成:
- const int * p;
可以理解成p是一個指針,它的類型是const int
,也就是常量類型。它既可以用來指向一個常量類型,也可以指向一個非常量類型,下方的這兩種方式都是合法的:
- int age = 23;
- const int* p = &age;
- const double price = 233;
- const double* pt = &price;
但是反過來,將一個const類型的變量賦值給一個非const的指針是非法的:
1
2
|
const int age = 23; int * p = &age; // 非法 |
如果非要這樣做,可以使用const_cast
運算符進行強制轉換,這個我們會在之后的文章當中討論。
另外還有一個很有意思的點,如果我們將一個非const
類型的變量賦給了const
類型的指針,雖然我們無法通過指針修改對應的值,
但是通過變量修改卻是可以的:
1
2
3
4
5
|
int age = 23; const int * p = &age; *p = 233; // 非法 age = 233; // 合法 |
還有,我們無法修改指針指向的值,但是修改指針指向的位置是可以的:
1
2
3
4
|
int age = 23; int price = 233; const int * p = &age; p = &price; |
1.2 const指針
上面我們介紹了指向const
的指針,還有另外一種指針叫做const
指針。const
指針指的是指針本身是const
修飾的,我們無法修改指針指向的位置。
1
2
|
int age = 23; int * const p = &age; |
但是我們修改指針指向的值是可以的:
1
|
*p = 2333; // 合法 |
1.3 指針和內容都不可變
當然我們也可以將兩種const疊加使用,讓指針指向的對象以及對象的值都不可修改:
1
|
const int * const p = &age; |
到此這篇關于C++ const
和指針詳情的文章就介紹到這了,更多相關C++ const
和指針內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!
文章轉自公眾號:Coder梁(ID:Coder_LT)