1.函数指针
int (*vptr)(int,int) = max;
格式是这样的,表示vptr这个指针指向 int max(int,int);的函数。
int max(int a,int b){
return a>b? a:b;
}
int main(){
int (*pMax)(int,int) = max;
int a = 3,b =6;
int result = pMax(a,b);
printf("the max number:%d\n",result);
return 0;
}
2.复杂指针理解
C语言中对于符号的定义,从名字开始,然后根据符号的先后顺序来解释定义。以下先后顺序从高到低:
定义中被括号( )括起来的那部分。
后缀操作符:括号( )表示这是一个函数,方括号[ ]表示这是一个数组。
前缀操作符:星号*表示“指向xxx的指针”。
1)int* p1[6]
这样写比较好理解,也能写成int *p1[6],先后顺序,先读p1[6],代表这是一个数组,数组中包含6个int*类型。
2)int (*p2)[6]
先读*p2,代表p2是个指针,再往外读,指向int[6]的数组。
3)int (*p3)(int ,int )
先读*p3,代表p3是个指针指向 int func(int,int)函数。
4)char *(* c[10])(int **p);
先读括号里头*c[10],c[10]的优先级高,代表c[10]是个指针数组,再往外,读(*c[10])(int **p),说明这个指针数组指向的是一个函数func(int **p),这个函数返回类型是char*。
5)int (*(*(*pfunc)(int *))[5])(int *);
先读括号里的*(*(*pfunc)(int *))[5],继续分解读*(*pfunc)(int *),可知pfunc是个指向函数的指针,函数返回值为指针。往外看,*(*(*pfunc)(int*))(int*))[5],可知这个pfunc指向的函数返回的指针,指向一个*[5]指针数组,这个数组里头的指针指向int func(int *)函数。
本文深入解析了C语言中的函数指针及复杂指针概念,包括如何定义与使用函数指针,以及对复杂指针类型的逐步解读,如数组指针、指向函数的指针等,帮助读者更好地理解和掌握C语言的高级特性。
668

被折叠的 条评论
为什么被折叠?



