Primer筆記——typedef指針類型別名時的const陷阱-創(chuàng)新互聯(lián)

目錄

創(chuàng)新互聯(lián)建站專業(yè)為企業(yè)提供雞東網(wǎng)站建設(shè)、雞東做網(wǎng)站、雞東網(wǎng)站設(shè)計、雞東網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計與制作、雞東企業(yè)網(wǎng)站模板建站服務(wù),10多年雞東做網(wǎng)站經(jīng)驗,不只是建網(wǎng)站,更提供有價值的思路和整體網(wǎng)絡(luò)服務(wù)。

一.typedef int* pint 與 const pint

二.typedef const int *pint?與?pint

三.總結(jié)


《C++ Primer》中指出,typedef與指針代指復(fù)合類型別名時,可能有意向不到的情況。

下面我們以int為例:

一.typedef int* pint 與 const pint

此時typedef的類型是int的指針,即指針類型。

既然pint本身是指針類型,那么const pint修飾的就是指針類型,pint本身就是指向int的常量指針。

即const pint可以改成這種形式:

const pint ->int* const

而人們往往會錯誤的替換成const int*的形式,這就是誤解了const的修飾對象。?

以下面代碼為例:

typedef int* pint;
int a = 1;
int b = 2;
const pint p = &a;
//即int* const p = &a

p = &b;//錯誤,常量指針不能修改指向
*p = 3;//正確,指針指向int變量

//注意:const pint p 與 pint const p等價

那么怎樣才能得到我們想要的const int*呢??

二.typedef const int *pint?與?pint

雖然pint還是一個指針類型數(shù)據(jù),但因為const int的存在,此時int是const類型的數(shù)據(jù)。

pint此時指向const int,即指向常量int的指針。

此時pint可變?yōu)槿缦滦问剑?/p>

pint ->const int*?

以下面代碼為例:

typedef const int* pint;
int a = 1;
int b = 2;
pint p = &a;
//即const int* p = &a;

*p = 3;//錯誤,p指向常量
p = &b;//正確,p本身是指針變量
三.總結(jié)

只要typedef中沒有聲明const,那么指針永遠指向變量。

只要類型別名在使用時有const修飾,那么指針永遠是常量指針。

即typedef中const決定指向?qū)ο髮傩?,定義時const決定指針自身屬性。

說的官方一點就是typedef決定底層const,定義決定頂層const。?

可以總結(jié)出如下表格:

typedef定義替換形式含義
typedef int* pint;pint p = &a;int* p指向變量的指針
const pint p = &a;int* const p指向變量的常量指針
typedef const int* pint;pint p = &a;const int* p指向常量的指針
const pint p = &a;const int* const p指向常量的常量指針

先解決問題再寫代碼——John Johnson


如有錯誤,敬請斧正?

你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機房具備T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧

分享文章:Primer筆記——typedef指針類型別名時的const陷阱-創(chuàng)新互聯(lián)
網(wǎng)頁地址:http://muchs.cn/article16/deojgg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站制作靜態(tài)網(wǎng)站、Google、網(wǎng)站設(shè)計公司、企業(yè)建站網(wǎng)站維護

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)頁設(shè)計公司