指针函数
顾名思义,即返回值为指针的函数
int * f (int n){
int *p = NULL;//空指针
return p;//返回一个地址
}
函数指针
指向函数的指针,每个函数都有自己的入口地址,函数指针专门指向这些地址
#include <stdio.h>
int max(int a, int b)
{
return a > b ? a : b;
}
int main(void)
{
int (*p)(int, int); //函数指针的定义
//int (*p)(); //函数指针的另一种定义方式,不过不建议使用
//int (*p)(int a, int b); //也可以使用这种方式定义函数指针
p = max; //函数指针初始化
int ret = p(10, 15); //函数指针的调用
//int ret = (*max)(10,15);
//int ret = (*p)(10,15);
//以上两种写法与第一种写法是等价的,不过建议使用第一种方式
printf("max = %d \n", ret);
return 0;
}
函数和数组在某些方面有些相似,如int a[ ] = {};中a是一个地址,而上述函数max也是一个地址
将指针函数和函数指针合体一下:
int *(*func)(int);//定义这样一个变量
上述语句就可以理解了,即其能指向一个函数,这个函数可以传入一个int类型的参数,其存储值本质上是这个函数返回值的地址(也就是说这个被指向的函数是一个指针函数)最朴素的讲,这个变量可指向指针函数
有点绕,看代码和输出效果如下:
#include<stdio.h>
int* mm(int a){
int *p = &a;
return p;
}
int main(){
int *(*p)(int);
p = mm;
int b = 0;
printf("%d\n", *p(100));
printf("%d\n", p(100));
return 0;
}