天天看点

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。

继续阅读