c语言函数指针 c语言函数

C语言中,指针函数和函数指针有什么区别?在C语言中指针函数和函数指针是两个不同的概念,不能混淆 。
指针函数本质上是函数,是一个返回类型为指针的函数,如:
int* max(int *array,int n)
{
//找最大值的地址
return 最大值的地址;
}
max就是一个指针函数 。
而函数指针本质上是指针,是指向函数的指针,如:
int (*funp)(int a,int b);
funp就是一个函数指针 , 可以用它指向一个返回类型为int、有两个int类型的参数的函数 。
c语言函数指针的作用 。C语言中函数指针与普通指针没什么差别,只是指向的内容不同而已 。主要作用:
1、实现面向对象编程中的多态性 。
2、回调函数 。
函数指针是指向函数的指针变量 。因此“函数指针”本身首先应是指针变量 , 只不过该指针变量指向函数 。这正如用指针变量可指向整型变量、字符型、数组一样,这里是指向函数 。
C在编译时,每一个函数都有一个入口地址,该入口地址就是函数指针所指向的地址 。有了指向函数的指针变量后,可用该指针变量调用函数,就如同用指针变量可引用其他类型变量一样,在这些概念上是大体一致的 。
函数指针有两个用途:调用函数和做函数的参数 。
c语言中函数名就是一个指针吗是的 。函数指针就是函数的指针,它是一个指针,指向一个函数 。这正如用指针变量可指向整型变量、字符型、数组一样 , 这里是指向函数 。
例:
A) char * (*fun1)(char * p1,char * p2);
B) char * *fun2(char * p1,char * p2);
表达式相比 , 唯一不同的就是函数的返回值类型为char**,是个二级指针 。
C) char * fun3(char * p1,char * p2);
fun3是函数名,p1,p2是参数 , 其类型为char *型,函数的返回值为char *类型 。
扩展资料
函数指针使用的例子
#include stdio.h
#include string.h
char * fun(char * p1,char * p2)
{
int i = 0;
i = strcmp(p1,p2);
if (0 == i)
{
return p1;
}
else
{
return p2;
}
}
int main()
{
char * (*pf)(char * p1,char * p2);
pf = fun;
(*pf) ("aa","bb");
return 0;
}
C语言中函数指针用法函数在内存中有一个物理位置c语言函数指针,而这个位置是可以赋给一个指针的 。一零点函数的地址就是该函数的入口点 。因此c语言函数指针,函数指针可被用来调用一个函数 。函数的地址是用不带任何括号或参数的函数名来得到的 。(这很类似于数组地址的得到方法c语言函数指针,即,在只有数组名而无下标是就得到数组地址 。)
怎样说明一个函数指针变量呢 ?
为c语言函数指针了说明一个变量 fn_pointer 的类型是"返回值为 int 的函数指针", c语言函数指针你可以使用下面的说明语句:
int (*fn_pointer) ();
为了让编译器能正确地解释这句语句,*fn_pointer 必须用括号围起来 。若漏了这对括号,则:
int *fn_pointer ();
的意思完全不同了 。fn_pointer 将是一个函数名 ,  其返回值为 int 类型的指针 。
2:函数指针变量
在C语言中规定,一个函数总是占用一段连续的内存区 ,  而函数名就是该函数所占内存区的首地址 。我们可以把函数的这个首地址 ( 或称入口地址 ) 赋予一个指针变量,使该指针变量指向该函数 。然后通过指针变量就可以找到并调用这个函数 。我们把这种指向函数的指针变量称为 " 函数指针变量 "。
函数指针变量定义的一般形式为:

推荐阅读