指针函数
顾名思义,即返回值为指针的函数
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;
}