C++中typedef和指针结合时理解

typedef可以定义一个类型的别名,一般常用的操作是定义一个结构体的别名,当然常用类型也可以,也可以加入指针:

1
2
3
4
typedef int* Fuck;
Fuck p1;
const Fuck p2 = 0;
const Fuck *p3;

typedef加入指针后,可能就比较难理解。诀窍是《C++ primer》中反复强调的:

从右往左看

首先看上面代码,定义了别名Fuckint指针这种类型。

然后变量p1的类型自然是int指针

而p2,首先从右开始,它是一个Fuck类型,然后被修饰了const,所以它是一个Fuck类型的常量。这时候再把别名Fuck换回原来的类型,则可知p2是一个类型为int指针的常量,即常量指针,是一个顶层const。

而p3,从右开始,它首先是一个指针,然后是一个Fuck的指针,然后被修饰了const,所以是一个指向常量Fuck的指针。这里再换回原来的类型,可知p3是一个指向了常量int指针的指针,是一个底层const。

其实疑惑的点在于*这个指针的修饰符,到底跟谁捆绑在一起。有的人可能会把p2直接改写为:

1
const int* p2 = 0;

如果这样的话,其实*是优先跟p2捆在一起的,加上括号的话就比较好理解,即:

1
const int (*p2) = 0;

也就是说,如果按照这种改写方式,其实我们定义p2是一个指向int常量的指针,是一个底层const。

而通过typedef定义的指针别名,加上括号来替换比较好理解,即:

1
const (int*) p2 = 0;

这样就能理解p2是一个int指针的常量。

C++中的&和* C++中的顶层const

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×