Contents

int p;    //p是一个int类型的东西(变量)
int p; //p是一个(int)类型的东西,int代表对int的指针
int p; //p是一个(int)类型的东西,int**代表指向int的指针的指针
const 修饰左边的东西,即 int const
p表示指向的 intconst
它与 const intp 等价;而 intconst p表示指向 int 的指针式 const 的。
由此可以理解 intconstp的含义,可以等效为(intconst)P;
&的用法与*类似;

int p(char a); p(char a)是返回值为 int 类型的东西(函数)
intp(char); p(char a)是返回值为 int 类型的东西(函数)
若想声明p为指针而非 p(char a)为一个指针呢?若p为指针,则它只可能指向”函数”类型或“函数”的指针(的指针……)的类型,而不像变量中可以指向 int,float 多类型,所以p前就不用加上”函数”类型说明符了,只需要加上,即 int(p)(char),若指向“函数”的指针,则是 int(**p)(char a),类推。
这里有一个著名的判断方法,叫做“左右法则”。运用如下:从变量名开始阅读声明,向右看,然后向左看。当你碰到一个括号时就调转阅读的方向。括号内的所有内容都分析完毕就跳出括号的范围。这样继续,直到整个声明都被分析完毕。

Contents