一、指针函数
本质是一个函数,其返回值是一个指针
#include<iostream>
using namespace std;
int* fun(int n)
{
static int sum = 0;
for (int i = 0; i <= n; i++) {
sum += i;
}
int* p = ∑
return p;
}
int main()
{
int* p = fun(5);
cout << "sum = " << *p << endl;
return 0;
}
结果如下:
这里使用static修饰sum,是因为局部变量存放于栈区,函数结束后,栈区的变量就会时放掉,当我们再次去访问此地址时,可能已经被其他数据占用,得到错误的结果。static修饰后,变量存在于数据段,其生命周期为整个函数,不用担心其值的改变。
二、函数指针
函数指针的本质是一个指针,该指针指向一个函数。
形式为 返回值类型 (*指针变量名)(函数形参)
int (*p)(int a);
p是一个指针,指向一个返回值为int类型,参数为一个整形的函数。
函数指针的初始化
#include<iostream>
using namespace std;
int fun(int n)
{
int sum = 0;
for (int i = 0; i <= n; i++) {
sum += i;
}
return sum;
}
int main()
{
int (*p)(int a);
p = fun;
int sum = p(5);
cout << "sum = " << sum << endl;
return 0;
}
因为函数名即是函数的地址,所以可以直接将函数名赋给函数指针。通过函数指针调用函数。
函数指针的作用-------回调函数
回调函数是将函数指针作为作为一个参数,传递给另外一个函数。回调函数广泛应用于Linux线程函数中。