函数指针
int (*funcPrt)(int, int);
首先funcPrt是一个指针,然后看它指向什么东西,剩下的是int …(int, int)所以指向的是一个参数为两个int返回int的函数。
返回指针的函数
int* func(int, int);
小括号优先级高于*,因此首先func是一个函数。剩下的是int* …,所以是一个返回int*的函数。
数组指针
int (*arrayPrt)[100];
首先arrayPrt是一个指针。剩下int …[100],所以是指向一个int[100]的指针。
指针数组
int* arrayOfPrt[100];
方括号优先级高于*,因此首先arrayOfPrt是一个数组。剩下int* …,所以是元素为int*的数组。
常数指针
const int* ptrOfConst;
首先是个指针,然后看指向什么,剩下const int,所以是指向const int。
指针常量
int * const ptrWhichIsCosnt;
首先是const的,然后是个指针,最后指向int。
规定是指针常量必须先结合const再结合*。
常成员函数
int func(int x) const {...}
常成员函数不能修改类里的变量。
返回常量的函数
const int func(int x) {...}
练习题
const int** ( * const * const func3)(int(*)(int,int)) = NULL;
int (*(*func5[10])(int(*)(int,int)))(int,int);
func3和func5是什么
GPT:
func3是一个指针,它指向一个函数,这个函数的参数是一个函数指针,返回值是一个指向指针的指针,这个指针指向一个const int
func5是一个数组,数组的每个元素是一个函数指针,这个函数指针指向一个函数,这个函数的参数是一个函数指针,返回值是一个函数指针
func5解析:首先func5是一个数组,然后数组元素是指针,现在看指针指向的是什么,退一个括号。左边是星号右边是小括号那么先看小括号,所以指针指向的是函数,函数的参数是int(*)(int,int)也就是接受两个int返回int的函数指针;然后看左边星号所以函数返回类型是指针,指针指向什么呢?退一个括号,指向一个接受(int,int)返回int的函数。