C语言:指针函数跟函数指针的区别?
指针函数和函数指针都是指针类型,主要有以下区别:
1.指针函数(pointer to function):指针函数是返回值为指针类型的函数,它本质上是一个函数,只是函数的返回值是指针类型。例如:
int* func(); // 声明一个指针函数,返回值为int类型的指针 int* p = func(); // 调用指针函数func(),将返回值赋给指针p
2.函数指针(function pointer):函数指针是指向函数的指针,它本质上是一个指针变量,指向一个函数的地址。例如:
int add(int a, int b) { return a + b; } // 定义一个函数add() int (*p)(int, int) = &add; // 声明一个函数指针p,指向add()函数的地址 int result = (*p)(2, 3); // 调用函数指针p,计算add(2, 3)的结果
3.总结: 指针函数是一个函数,它的返回值是指针类型;而函数指针是一个指向函数的指针,它保存了函数的地址,可以通过指针调用函数。
延伸阅读
函数指针的典型用法?
函数指针是指向函数的指针。可以使用它来实现函数指针数组或函数指针表,以实现动态函数调用,也可以实现回调函数。
函数指针典型用法:
1. 回调函数:将函数的地址作为参数传递给另一个函数,当函数完成执行后,可以调用回调函数来使用结果。
2. 函数指针数组:可以使用函数指针数组来实现函数的动态调用,根据不同的输入变量调用不同的函数。
3. 函数对象:可以使用函数指针作为对象的成员,在需要时调用该函数来实现特定功能。
如何调用指针函数?
如果存在函数指针p,以*p取函数指针的值,然后加上参数列表调用即可。即ret=(*p)(arg_list)
;如,p为int(*)(int)类型的函数指针,那么inta=(*p)(10);这样就是一次典型的函数指针调用。
主函数如何调用指针函数?
主函数调用指针函数的步骤:
1、定义一个函数指针;
2、将函数指针指向一个函数;
3、调用这个函数指针所指向的函数。
函数指针”本身首先应是指针变量,只不过该指针变量指向函数。这正如用指针变量可指向整型变量、字符型、数组一样,这里是指向函数。
函数指针和指针函数有啥区别?
1、指针函数是指带指针的函数,即本质是一个函数。
函数返回类型是某一类型的指针 类型标识符 *函数名(参数表) int *f(x,y); 首先它是一个函数,只不过这个函数的返回值是一个地址值。函数返回值必须用同类型的指针变量来接受,也就是说,指针函数一定有函数返回值,而且,在主调函数中,函数返回值必须赋给同类型的指针变量。 表示: float *fun(); float *p; p = fun(a); 注意指针函数与函数指针表示方法的不同,千万不要混淆。最简单的辨别方式就是看函数名前面的指针*号有没有被括号()包含,如果被包含就是函数指针,反之则是指针函数。
2、函数指针是指向函数的指针变量,即本质是一个指针变量。 int (*f) (int x); /* 声明一个函数指针 */ f=func; /* 将func函数的首地址赋给指针f */ 指向函数的指针包含了函数的地址,可以通过它来调用函数。声明格式如下: 类型说明符 (*函数名)(参数) 其实这里不能称为函数名,应该叫做指针的变量名。这个特殊的指针指向一个返回整型值的函数。指针的声明笔削和它指向函数的声明保持一致。 指针名和指针运算符外面的括号改变了默认的运算符优先级。如果没有圆括号,就变成了一个返回整型指针的函数的原型声明。