一、形式:
函数指针:int (*f)(int x,int y);
指针函数:int *f(int x,int y);
二、概念:
函数指针本质是一个指针,其指向一个函数。
指针函数本质是一个函数,其返回值为指针。
三、示例
函数指针:
#include <stdio.h>
#include<stdlib.h>
int add(int x, int y)
{
return x + y;
}
int sub(int x, int y)
{
return x - y;
}
/*这是一个函数指针,因为()的优先级大于*的有限级,但是(*f)排在前边,所示这是一个指针,
函数指针就是一个指针,他和变量指针一样,指向的都是一个地址,例如变量指针(也就是我们常说的指针)指向的是这个变量的地址
而函数指针,指向的是这个函数的地址
*/
int (*f)(int x, int y);//定义了一个函数指针
int main()
{
f = &add;//因为f是一个函数指针,也就是一个指针,那么就是一个地址,现在取函数add的地址赋给f,也就是函数f的功能等同于函数add的功能
printf("1+2= %d\n",(*f)(1,2));
f = ⊂
printf("1-2= %d\n",(*f)(1,2));
}
指针函数:
#include <stdio.h>
#include<stdlib.h>
int c;//这里定义add和sub都是指针函数,返回的都是一个指针即一个地址。
int * add(int x, int y)
{
c=x + y;
return &c;
}
int * sub(int x, int y)
{
c = x -y;
return &c;
}
/*这是一个指针函数*/
int * (*f)(int x,int y);
int main()
{
f = add;
printf("1+2= %d\n", *(*f)(1, 2));
f = sub;
printf("1-2= %d\n", *(*f)(1, 2));
printf("1-2= %p\n", *f);
}
*f 返回的就是一个地址, 那么*(*f)就是指向这个地址的变量,所以实现了这样的功能。