阅读代码的时候,常会见到两种格式的指针或引用声明
// 第一种,*与变量名挨着
int *p;
// 第二种,*与类型名挨着
int* p;
两种写法对编译器来说没区别,但是体现了写代码人的两种观点。
第一种,与变量名挨着,是写代码的人认为修饰变量名。int *p
声明了一个int
类型的变量*p
,*
表示p
是一个指针。
第二种,与类型名挨着,写代码的人认为修饰类型名。int* p
声明了一个int*
类型的变量p
,int*
表示指向int
类型的指针。
第一种观点是对的。该观点也可以扩展到引用。
C++声明结构为:className varName
。*
或&
等修饰符是varName
的一部分。
所以多指针声明时int *p1, *p2, ...
才合法
更进一步,根据className varName
这个格式,明确修饰符是varName
的一部分后,很多复合修饰符就容易解读了。
如int *&p
,首先声明了一个int类型的变量*&p
,*
表示&p
是一个指针,&
表示p
是一个引用,所以p
是一个int类型指针的引用