指针函数
指针函数: 顾名思义,它的本质是一个函数,不过它的返回值是一个指针。
如下声明方式:
ret *func(args, ...);
下述代码就是指针函数的例子:
#include <stdio.h>
//指针函数
int *fun_sum(int n)
{
static int sum = 0;
int *p;
int i;
for(i=0;i<=n;i++)
{
sum += i;
}
p = ∑
return p;
}
int main()
{
int num = 3;
int *sumP;
sumP=fun_sum(num);
printf("sum求和结果:%d\n", *sumP);
return 0;
}
上述代码中 int *fun_sum(int n) 就是一个指针函数,其功能很简单,就是自然数求和,其结果通过指针的方式返回给调用方,指针函数中用到了static去修饰变量,如果不用static修饰静态变量,结果就会出错,原因就是静态变量和局域变量的生命周期不一样,具体可以看下静态变量和局域变量的区别,因此,在使用指针函数的时候,一定要避免出现返回局部变量指针的情况。
函数指针
与指针函数不同,函数指针 的本质是一个指针,该指针的地址指向了一个函数,所以它是指向函数的指针。
我们知道,函数的定义是存在于代码段,因此,每个函数在代码段中,也有着自己的入口地址,函数指针就是指向代码段中函数入口地址的指针。
其声明形式如下所示:
ret (*p)(args, ...);
例子如下:
#include <stdio.h>
//函数指针
int max(int m,int n)
{
return m > n ? m : n;
}
int main()
{
int (*p)(int a,int b); //函数指针的定义 *p必须()括起来
p = max; //函数指针的初始化 函数名字就是函数的地址,类似数组名就是数组的首地址
int max_num = p(5, 8); //函数指针的调用
printf("max_num = %d \n", max_num);
return 0;
}
可以看下篇练习demo深入理解: C语言指针函数,函数指针练习demo