本文寫作時(shí)長1小時(shí)
以前我們學(xué)習(xí)過C++中的引用雷恃,引用就是變量的別名。不光變量可以定義別名,類型也可以聲明別名。
聲明類型的別名有兩種方式
從C繼承過來的typedef
typedef double wages;
typedef wages base,*p;
double == wages == base double * == p
這些類型都是可以互換的秤掌。其中,typedef是作為基本數(shù)據(jù)類型的一部分出現(xiàn)鹰霍,typedef出現(xiàn)的聲明語句定義的不是變量而是類型別名闻鉴。值得一提的是,像*
這樣的符號屬于類型修飾符茂洒,修飾前面的類型用的孟岛,而*p
則叫做聲明符,聲明符中可以出現(xiàn)類型修飾(比如*
),這和定義變量相差無幾渠羞,所以也能由基本數(shù)據(jù)類型構(gòu)造出復(fù)合類型來斤贰。
新標(biāo)準(zhǔn)中的 別名聲明 using
using wages = double;
using p = wages *;
常量指針的類型別名
typedef int *pint;
int i = 0;
const pint pi = &i;
千萬別蒙,再解釋一遍次询,typedef int
是屬于基本數(shù)據(jù)類型部分腋舌,*
是類型修飾符,表明這是個指針渗蟹。*pint
屬于聲明符,聲明符中包含了一個類型修飾符*
赞辩,pint
是類型別名的名字雌芽。那么pint
是什么類型的別名呢?掐頭去尾辨嗽,中間的部分int *
世落,所以pint
是一個指向int
類型的指針類型。
那么糟需,pi
就是一個指向int
類型的指針變量屉佳,由于基本類型中有const
,所以pi
是一個指向int
類型的常量指針洲押,而非大多數(shù)程序員理解的只讀指針武花,所以以下這種替換是錯誤的:
const int *pi = &i;
這樣意義則完全不同,這時(shí)pi
是一個指向int
類型的只讀指針杈帐,千萬要記住体箕,不能這么替換!
原理解讀:
在const pint pi = &i;
中挑童,pi
的基本類型是int *
累铅,也就是指針,const
限定指針站叼,即為常量指針娃兽。而在const int *pi = &i;
中,pi
的基本類型是int
尽楔,const
限定int
投储,則成為只讀指針。
最后給讀者出一道思考題目