函數指針—指向函數的指針:
#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);
返回的指針指向函數時:在右邊加括號表示函數的入參;