目錄
創(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)