EasyC++,Const和指針
大家好,我是梁唐。
這是EasyC++系列的第28篇,簡(jiǎn)單聊聊const和指針。
指針和const
我們知道const關(guān)鍵字修飾的是不可變量,將它和指針一起使用,會(huì)有很多微妙的地方。
關(guān)于使用const來(lái)修飾指針,有兩種不同的方式。第一種是讓指針指向一個(gè)常量對(duì)象,這樣可以防止使用該指針進(jìn)行修改指向的值。第二種則是將指針本身聲明為常量,可以防止改變指針指向的位置。下面我們來(lái)看下細(xì)節(jié)。
指向常量的指針
首先是指向常量的指針,含義是指針的類型是一個(gè)常量類型。所以寫成:
- const int * p;
可以理解成p是一個(gè)指針,它的類型是const int,也就是常量類型。它既可以用來(lái)指向一個(gè)常量類型,也可以指向一個(gè)非常量類型,下方的這兩種方式都是合法的:
- int age = 23;
- const int* p = &age;
- const double price = 233;
- const double* pt = &price;
但是反過(guò)來(lái),將一個(gè)const類型的變量賦值給一個(gè)非const的指針是非法的:
- const int age = 23;
- int* p = &age; // 非法
如果非要這樣做,可以使用const_cast運(yùn)算符進(jìn)行強(qiáng)制轉(zhuǎn)換,這個(gè)我們會(huì)在之后的文章當(dāng)中討論。
另外還有一個(gè)很有意思的點(diǎn),如果我們將一個(gè)非const類型的變量賦給了const類型的指針,雖然我們無(wú)法通過(guò)指針修改對(duì)應(yīng)的值,但是通過(guò)變量修改卻是可以的:
- int age = 23;
- const int* p = &age;
- *p = 233; // 非法
- age = 233; // 合法
還有,我們無(wú)法修改指針指向的值,但是修改指針指向的位置是可以的:
- int age = 23;
- int price = 233;
- const int* p = &age;
- p = &price;
const指針
上面我們介紹了指向const的指針,還有另外一種指針叫做const指針。const指針指的是指針本身是const修飾的,我們無(wú)法修改指針指向的位置。
- int age = 23;
- int* const p = &age;
但是我們修改指針指向的值是可以的:
- *p = 2333; // 合法
指針和內(nèi)容都不可變。
當(dāng)然我們也可以將兩種const疊加使用,讓指針指向的對(duì)象以及對(duì)象的值都不可修改:
- const int * const p = &age;
本文轉(zhuǎn)載自微信公眾號(hào)「Coder梁」,可以通過(guò)以下二維碼關(guān)注。轉(zhuǎn)載本文請(qǐng)聯(lián)系Coder梁公眾號(hào)。