指针,指针函数与函数指针

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

int p(char a);    p(char a)是返回值为 int 类型的东西(函数)
int*p(char);    p(char a)是返回值为 int *类型的东西(函数)
若想声明p为指针而非 p(char a)为一个指针呢?若p为指针,则它只可能指向”函数”类型或“函数”的指针(的指针……)的类型,而不像变量中可以指向 int,float 多类型,所以p前就不用加上”函数”类型说明符了,只需要加上*,即 int*(*p)(char),若指向“函数”的指针,则是 int*(**p)(char a),类推。

这里有一个著名的判断方法,叫做“左右法则”。运用如下:从变量名开始阅读声明,向右看,然后向左看。当你碰到一个括号时就调转阅读的方向。括号内的所有内容都分析完毕就跳出括号的范围。这样继续,直到整个声明都被分析完毕。

Tagged with: , , ,

发表评论

邮箱地址不会被公开。 必填项已用*标注

*