变量的定义包括一个基本数据类型和一组声明符。在同一条定义语句中可能定义出不同类型的变量:

很多程序员容易迷惑于基本的数据类型和类型修饰符的关系,其实后者不过是声明符的一部分罢了。

定义多个变量:

int *p1,p2;//p1是指向int的指针,p2是int。

int *p1,*p2;//p1,p2都是指向int的指针。

这种形式着重强调变量具有的符合类型。第二种把修饰符和类型名写在一起,并且每条语句只定义一个变量。

指向指针的指针:

一般来说,声明符中修饰符的个数并没有限制。当有多个修饰符连写在一起时,按照其逻辑关系详加解释即可。以指针为例,指针是内存中的对象,向其他对象一样也有自己的地址,因此允许把指针的地址在存放到另一个指针当中。

  通过*的个数可以区分指针的级别。也就是说,**表示指向指针的指针,***表示只想指针的指针的指针,以此类推:

int val=1024;

int * p1=&val;//p1指向一个int型的数

int ** p2=&p1;//p2指向一个int型的指针

指向指针的引用:

引用本身不是一个对象,因此不能定义指向引用的指针。但指针是对象,所以存在对指针对象的引用:

int i=43;

int * p;//p是一个int型的指针

int &r=p;//r是一个对指针p的引用

r=&i;//r引用了一个指针,因此给r赋值&i就是令p指向i。

*r=0; //解引用r得到i,也就是p指向的对象,将i的值改为0。

面对一条比较复杂的指针或者引用的声明语句时,从右向左读有助于弄清楚他的真实含义。