函数指针—指向函数的指针:
#include <stdio.h>
int fun1(int a)
{
printf("%d\n",a);
return 8;
}
int main()
{
int (*p1)(int);
p1 = fun1;
int res = p1(3);
printf("函数指针返回值:%d\n",res);
return 0;
}
指向的函数返回值为 指向int的指针
#include <stdio.h>
int m = 2;
int *fun2(int a)
{
printf("%d\n",a);
return &m;
}
int main()
{
int *(*p2)(int);
p2 = fun2;
int *p22 = p2(3);
printf("m的值:%d\n",m);
printf("函数指针返回值 指向的值: %d\n",*p22);
}
指向的函数返回值为 指向数组的指针
#include <stdio.h>
int* *fun(int a)
{
printf("%d\n",a);
static int b[3] = {1,2,3};
int(*p2)[3] = &b;
return p2;
}
int main()
{
int (*(*fp1)(int)) [3];
fp1 = fun;
int(*p)[3] = fp1(2);
printf("%d\n",(*p)[0]);
}
指向的函数返回值为 指向指针的指针
#include <stdio.h>
int m = 11;
int* *fun(int a)
{
printf("%d\n",a);
static int *p1 = &m;
int **p2 = &p1;
return p2;
}
int main()
{
int *(*(*fp1)(int));
fp1 = fun;
int **p = fp1(2);
printf("%d\n",*(*p));
}
指向的函数返回值为 指向函数的指针:
#include <stdio.h>
int base(int a)
{
printf("%d\n",a);
return 4;
}
int *fun(int a)
{
printf("%d\n",a);
int (*p1)(int);
p1 = base;
return p1;
}
int main()
{
int (*(*fp1)(int)) (int);
fp1 = fun;
int (*p1)(int) = fp1(2);
int m = p1(44);
printf("%d\n",m);
}
整理总结:
*p1;
指针p1;
int (*p1)(int);
指向函数的:符号p1后要有(),()里面是函数入参,右边是返回值类型;
int *(*p2)(int);
返回值是指针类型:会在 (*p1)左侧加 *;且*是右结合的,若要加括号:int (*(*p2)(int));
int (*(*fp1)(int)) [3];
返回的指针指向数组时:[]加在右边;
int *(*(*fp1)(int));
返回的指针指向指针时:*加在左边;
int (*(*fp1)(int)) (int);
返回的指针指向函数时:在右边加括号表示函数的入参;