C++ const修饰符和指针
C++ const修飾符和指針
開發(fā)工具與關(guān)鍵技術(shù):C++、VisualStudio 作者:何任賢 撰寫時(shí)間:2019年04月10日 const修飾符,是用來(lái)修飾變量,被const修飾符,修飾過的變量,就叫做常量,常量是一種只能被讀取,不能被修改的量。在C++聲明一個(gè)常量時(shí),不但要const修飾符還有在聲明時(shí)就要給它進(jìn)行初始化,你不給它初始化,編譯器就會(huì)報(bào)錯(cuò),不給const修飾符就不是常量,下面是對(duì)常量只讀屬性和聲明的示例void main()
{
const int a = 10;
a = 15;
}
當(dāng)你嘗試給常量賦值時(shí),編譯器會(huì)報(bào)錯(cuò),并且給你提示,意思是表達(dá)式必須是可以修改的左值,證明了常量是不可以修改的,那么你不給常量初始化編譯器又會(huì)報(bào)什么錯(cuò)呢?
我們可以看到當(dāng)我不給常量賦值時(shí),編譯器報(bào)錯(cuò),并提示常量a需要初始值設(shè)定項(xiàng),證明了常量必須進(jìn)行初始化操作。
那么我們用const修飾符修飾指針呢?又有什么樣的效果?指針和普通變量不同指針存儲(chǔ)的是地址,那么const修飾符對(duì)指針修飾產(chǎn)生的效果有三種。我們先說第一種。
先看代碼和結(jié)果我們?cè)僬f第一種
void main()
{
int x = 10;
const int *a;
a = &x;
cout << “a所指向的地址:” << a << “\n”
<< “a的解地址” << *a << “\n”;
}
通過結(jié)果和代碼我們可以知道被const修飾符這樣修飾的指針還是可以獲得地址和解地址的,那么可以改變解地址后的值嗎?因?yàn)橹羔樖强梢酝ㄟ^地址修改值的,那么讓const修飾過還行嗎?
這個(gè)錯(cuò)誤和上面的是一樣的,我們現(xiàn)在可以知道,const這樣修飾的話,會(huì)使指針無(wú)法通過解地址修改x的值,這是第一種的效果,我們稱它為指向常量的指針,那么第二種
我們發(fā)現(xiàn)第二種有兩個(gè)錯(cuò)誤,和之前的一樣,意思這個(gè)指針要進(jìn)行初始化,該初始化是固定不可修改的。
void main()
{
int x = 10; int *const a= &x;
*a = 15;
cout << *a << “\n”;
}
我們可以知道的是,這樣修飾的指針是可以正常的對(duì)解地址的值進(jìn)行賦值的,那么我們一般稱它為常量指針
那么第三種呢則是這兩種的結(jié)合體,不但不可以對(duì)解地址賦值,還不能改變指針?biāo)赶虻牡刂?#xff0c;而且還必須進(jìn)行初始化,反正就是什么都不能動(dòng),但是我們可以正常的讀取值,這種結(jié)合了第一第二種特性,那么它名字也是結(jié)合的就是指向常量的常量指針,這就是const修飾符對(duì)指針修飾的三種不同的效果。
總結(jié)
以上是生活随笔為你收集整理的C++ const修饰符和指针的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 极光:2021年移动互联网母婴亲子行业研
- 下一篇: 11个方法,打造用户增长体系