日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
詳解C++中常量與指針

在面試中我們經(jīng)常會被面試官問到什么是常量指針,什么又是指針常量,在C++中也很容易把常量與指針常量與指針搞混,下面為大家詳細(xì)講解一下C++中常量與指針。

作為一家“創(chuàng)意+整合+營銷”的成都網(wǎng)站建設(shè)機(jī)構(gòu),我們在業(yè)內(nèi)良好的客戶口碑。創(chuàng)新互聯(lián)提供從前期的網(wǎng)站品牌分析策劃、網(wǎng)站設(shè)計、網(wǎng)站設(shè)計、網(wǎng)站制作、創(chuàng)意表現(xiàn)、網(wǎng)頁制作、系統(tǒng)開發(fā)以及后續(xù)網(wǎng)站營銷運(yùn)營等一系列服務(wù),幫助企業(yè)打造創(chuàng)新的互聯(lián)網(wǎng)品牌經(jīng)營模式與有效的網(wǎng)絡(luò)營銷方法,創(chuàng)造更大的價值。

前言

和指針聯(lián)用有佷微妙的地方,之前一直佷暈,現(xiàn)在來繼續(xù)研究下。諸如以下:

int const;
const int;
const int* p;
int const* p;
int* const p;
const int* const p;

const 是一種處理符號常量的方法,以 const 聲明的變量,一般首字母大寫,聲明之后無法被修改。相比于 define,const 會顯式的指定類型。除定義符號外,一般可用于函數(shù)聲明,表示函數(shù)不會修改任何值;用于參數(shù),表示函數(shù)不會修改參數(shù);甚至可以用于聲明數(shù)組的長度。

解讀

const默認(rèn)作用于其左邊的東西。左邊沒東西的情況下,作用于其右邊的東西。1

const int* p,只有右邊有東西,修飾的為 int,所以數(shù)值不能被修改。在與 * 結(jié)合,意思是*p不能被修改,其它的都可以。即不可通過該指針改變其指向的內(nèi)容,但可改變指針本身所指向的地址。

int const* p,先作用于左側(cè)的 int 為 int const,在疊加上右側(cè)的 ,所以修飾的為 int p,所以,*p不能被修改,其它的都可以。即不可通過該指針改變其指向的內(nèi)容,但可改變指針本身所指向的地址。也就是,和上面的是一樣的。

int* const p,左邊是 *,所以 const 作用于指針,指向一個 int 變量。即不可以修改 p,但可以修改 *p,即不可改變指向的地址。

const int* const p,對于第一個 const,左邊沒東西,修飾右邊的 int,指向的值不能修改;對于第二個 const 修飾 ,指針不能修改。即不可改變指針本身所指向的地址,也不可通過指針改變其指向的內(nèi)容。同 int const const p。

int const* const* p,第一個 const 修飾 int,第二個 const 修飾第一個 ,也就是,指向 const int const p 的指針,最后一個 * 沒有被修飾,因此可以指向其它變量。int const* const* const 就不可以了。之后再出現(xiàn)此類情況,也可以慢慢分析滿天飛的 const 和指針。

一些例子

為了更好的理解上述內(nèi)容,這里來舉一些例子。常見的一般有兩種選擇:

常指針指向一個變量,防止修改指針修改變量值

常指針指向一個常量

非常指針指向常量(錯誤)

先看第一種情況:解引用只是取出指向內(nèi)存區(qū)域的值,因此指向內(nèi)存區(qū)域的值是可以直接修改的,但不能通過指針修改。

int main (){
   int a{34};
   const int *p = &a;
   // *p 為 const,不能被修改
   // 錯誤
   // *p ++;
   // p 指向的不是常量,因此,可以修改 a
   a ++;
   std::cout return 0;
}

對于第二種情況:不能修改變量,也不能修改常量。

int main (){

   const int a{34};
   // *p 為 const,不能被修改,a 也不能被修改
   const int *p = &a;
   std::cout return 0;
}

對于第三種情況:修改指針來修改常量會顯得佷荒謬,因此編譯會直接報錯:

int main (){
   const int a{34};
   // error: invalid conversion from 'const int*' to 'int*'
   int *p = &a;
   *p ++;
   std::cout return 0;
}

二級指針

之前說到,常指針可以指向變量,但是涉及二級指針后,情況又會發(fā)生逆轉(zhuǎn)。

int main (){

   const int a{12};
   const int** p1;
   int* p2;

   // error: invalid conversion from 'int**' to 'const int**'
   p1 = &p2;
   *p1 = &a;

   *p2 = 10;

   return 0;
}

如果上述代碼通過,那么完全可以通過 p2 指針修改常量。因此我們可以得到以下結(jié)論:

若數(shù)據(jù)類型本身不是指針,可以將 const 數(shù)據(jù)或非 const 數(shù)據(jù)的地址賦給指向 const 的指針,但指針可以修改,指向別的值。因此,const 修飾的數(shù)組不能傳參給非常量指針。

如果數(shù)據(jù)類型是指針,非 const 數(shù)據(jù)的地址只能賦值給非 const 指針,如二級指針中,p1 = &p2 是錯誤的。


網(wǎng)站名稱:詳解C++中常量與指針
分享網(wǎng)址:http://www.dlmjj.cn/article/dhdjode.html