C语言高级进阶
函数指针
学习内容
函数指针是指向函数的指针变量。 因此“函数指针”本身首先应是指针变量,只不过该指针变量指向函数。这正如用指针变量可指向整型变量、字符型、数组一样,这里是指向函数。如前所述,C在编译时,每一个函数都有一个入口地址,该入口地址就是函数指针所指向的地址。有了指向函数的指针变量后,可用该指针变量调用函数,就如同用指针变量可引用其他类型变量一样,在这些概念上是大体一致的。 函数指针有两个用途:调用函数和做函数的参数。
学习产出
函数指针的声明
void (*foo)();
这个声明很像函数原型的声明,如果去掉第一对括号,看起来就像函数foo的原型,它接受void类型参数,返回void *类型值。括号让这个声明变成了一个名为foo的函数指针,*号表示这是一个指针。 如下图所示表示函数指针声明的各个部分: 下面是声明函数指针的其他一些例子:
int(*f1)(double);
void (*f2)(char *);
double * (*f3)(int,int);
对函数指针在命名约定上我们建议用fptr做前缀。 另外不要把返回值为指针的函数和函数指针搞混,下面f4是一个函数,它返回一个整型指针,而变量f5是一个返回值为整型的函数指针,变量f6是一个返回值为整型指针的函数指针。
int *f4();
int (*f5)();
int* (*f6)();
函数指针的使用 下面是使用函数指针的一个简单示例,示例函数接受一个整型参数并返回一个整型参数。
int (*fptr1)(int);
int square(int n)
{
return n*n;
}
int main()
{
int a = 6;
fptr1 = square;
printf("%d squared is %d\n", a, fptr1(a));
}
执行结果如下:
|