一、区分指针数组和数组指针
首先要判断他是一个指针还是数组
比如:int (*p)[3] p首先是一个指针,如果有括号p先于括号里面的结合,所以这个表达的就是数组指针
int* p[3],还是先看是指针还是数组呢?可以根据结合律可以知道,p先跟右边结合,也就是说p是一个数组,数组里面的元素都是int指针类型。
所以不难发现,指针数组还是数组指针,后两个字就代表了类型,我们最重要的是先确定他是一个数组还是指针,之后就不难判断了。
二、区分函数指针和指针函数
这个判断和区别指针数组和数组指针如出一辙,我们也要先判断他是一个函数,还是一个指针。
bool (*pf) (const string&,const string&) 首先pf是一个指针,这个指针指向了一个有两个参数类型为const string&,返回值是bool类型的函数,所以这是一个函数指针。
bool* pf(const string&,const string&) 可以发现pf是一个函数名字,而返回值成了bool*,所以这是一个指针函数
三、关于函数指针的一些注意事项
1.函数指针的类型必须与它所指向的函数的签名完全匹配,包括返回类型、参数的数量和类型。任何不匹配都会导致编译错误。
2.函数指针在声明时必须被初始化为指向某个有效的函数,否则它们将包含垃圾值,尝试调用这些垃圾值会导致程序崩溃。
3.函数指针和指针一样,可以设置初始值为空指针,nullptr、=0也是可以的
希望这篇文章对你有所帮助,在C++中关于指针的一些知识尤其重要,可以多加关注。