C語(yǔ)言關(guān)鍵字const和指針的結(jié)合使用
我們先定義三個(gè)變量
1、const int *p1
2、int const *p2
3、int *const p3
p1、p2、p3這三個(gè)指針都是指向int類型的,那它們有什么區(qū)別呢
寫個(gè)代碼測(cè)試一下
編譯一下
可看到第11,12,16行報(bào)錯(cuò),從中可得出以下結(jié)論:
const int * 與 int const *是一樣的效果,指向的內(nèi)存是不能改變的,即指針指向的內(nèi)容是只讀的,或者說(shuō)是一個(gè)常量。不過(guò)指向的位置是可以更改的,即p1和p2可以重新指向別的常量。
而char *const 剛好相反,表示指針的內(nèi)容是只讀的,即指針指向的位置是不可修改的,但是指針指向的內(nèi)存是可讀可寫的。
如果指向的內(nèi)存和位置都是不能改的呢?
哈哈哈,肯定都能想到,
int *const const pointer 與 const int *const pointer 都是可以的。
那如果const和typedef一起用會(huì)怎么樣?
//先定義個(gè)新類型 typedef int *intp; const intp p1; intp const p2;
p1和p2,哪個(gè)指向的位置不能變,哪個(gè)指向的內(nèi)存不能變呢?
答案是:p1和p2是一樣的,都是指向的位置不能變,即如果指向了a,就不能再指向b。
所以如果想指向的內(nèi)容不能變,就不能用typedef來(lái)定義新類型了。
下面是驗(yàn)證代碼和編譯結(jié)果
總結(jié)
以上所述是小編給大家介紹的C語(yǔ)言關(guān)鍵字const和指針的結(jié)合使用,希望對(duì)大家有所幫助!
相關(guān)文章
Qt基礎(chǔ)開(kāi)發(fā)之Qt文件操作類QFile讀寫文件的詳細(xì)方法與實(shí)例及QDataStream的使用方法
這篇文章主要介紹了Qt基礎(chǔ)開(kāi)發(fā)之Qt文件操作類QFile讀寫文件的詳細(xì)方法與實(shí)例,需要的朋友可以參考下2020-03-03C語(yǔ)言 不使用strcat函數(shù)實(shí)現(xiàn)連接兩個(gè)字符串功能代碼
今天小編就為大家分享一篇C語(yǔ)言 不使用strcat函數(shù)實(shí)現(xiàn)連接兩個(gè)字符串功能代碼,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-12-12C++20 特性 協(xié)程 Coroutines(1)
這篇文章主要給大家分享得是C++20 得特性 協(xié)程 Coroutines,下面文章內(nèi)容我們將來(lái)具體介紹什么是協(xié)程,協(xié)程得好處等知識(shí)點(diǎn),需要的朋友可以參考一下2021-10-10簡(jiǎn)單比較C語(yǔ)言中的execl()函數(shù)與execlp()函數(shù)
這篇文章主要介紹了C語(yǔ)言中的execl()函數(shù)與execlp()函數(shù)的簡(jiǎn)單比較,是C語(yǔ)言入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下2015-08-08C++多態(tài)虛析構(gòu)和純虛析構(gòu)的實(shí)現(xiàn)
本文主要介紹了C++多態(tài)虛析構(gòu)和純虛析構(gòu)的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-09-09基于C語(yǔ)言的開(kāi)源csv解析庫(kù)MiniCSV的使用示例
這篇文章主要為大家詳細(xì)介紹了基于C語(yǔ)言中的開(kāi)源csv解析庫(kù)——MiniCSV的使用示例,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-07-07模擬實(shí)現(xiàn)C語(yǔ)言中的內(nèi)存管理
這篇文章主要內(nèi)容是模擬C語(yǔ)言中的內(nèi)存管理,需要的朋友可以參考下2015-07-07