天天看點

C++中typedef與const、指針1 typedef的用法2 使用typedef定義指針的别名3 const來修飾typedef定義指針的别名4 typedef定義const int*

1 typedef的用法

在C++中,typedef關鍵字用來定義類型的别名。

typedef double wages;
           

此時,wages是double的别名,可以将wages作為資料類型來定義其他變量。

wages mywage;
           

其中,mywage的類型是double。

2 使用typedef定義指針的别名

使用typedef定義指針的别名的方法與“1 typedef的用法”中提到的方法類似。

typedef int* pint;

int i = 1;

pint mypint = &i;
           

此時,mypint的類型是int的指針。

3 const來修飾typedef定義指針的别名

typedef int* pint;

const pint mycpint = 0;
           

其中,mycpint的類型是指向int的指針,mycpint本身是常量,是以需要對其賦初值。以下代碼

const pint mycpint;
           

會有“mycpint需要初始值設定項”的錯誤提示。

而如下代碼

mycpint = &i;
           

會有“表達式必須是可修改的左值”的錯誤提示。

從以上分析可以看出,

const pint mycpint = 0;
           

并不是簡單地将pint替換成int*,即變成如下代碼

const int* mycpint;
           

以上代碼的含義是mycpint指向const int,其本身是并非是const,而是一個可以修改的變量。

4 typedef定義const int*

使用如下代碼來定義const int*的别名

typedef const int *cpint;

cpint mycpint1;

mycpint1 = &i;
           

其中,mycpint1的類型是指向const int的指針,其本身并非const,是以可以不用賦初值,并且在随後的代碼中可以将其指派為int的指針&i。

與“3 const來修飾typedef定義指針的别名”中提到的别名差別在于

typedef const int *cpint;
           

可以看成

(const int) *cpint;
           

cpint首先是一個指針,該指針指向了一個const int。

const pint mycpint = 0;
           

可以看成

const (pint) mycpint = 0;
           

mycpint是一個const指針,該指針類型是pint,即指向char。

繼續閱讀