1 区别总结
写法不同
指针函数:int* fun(int x,int y);
函数指针:int (*fun)(int x,int y);
可以简单粗暴的理解为,指针函数的*
是属于数据类型的,而函数指针的星号是属于函数名的。
再简单一点,可以这样辨别两者:函数名带括号的就是函数指针,否则就是指针函数
2 指针函数
指针函数:一个函数的返回值为指针,则该函数叫做指针函数。 int *fun(int a,int b){ }
定义
指针函数,简单的来说,就是一个返回指针的函数,其本质是一个函数,而该函数的返回值是一个指针。
声明格式为:*
类型标识符 函数名(参数表)
这似乎并不难理解,再进一步描述一下。
看看下面这个函数声明:
int fun(int x,int y);
这种函数应该都很熟悉,其实就是一个函数,然后返回值是一个 int 类型,是一个数值。
接着看下面这个函数声明:
int *fun(int x,int y);
这和上面那个函数唯一的区别就是在函数名前面多了一个*
号,而这个函数就是一个指针函数。其返回值是一个 int 类型的指针,是一个地址。
这样描述应该很容易理解了,所谓的指针函数也没什么特别的,和普通函数对比不过就是其返回了一个指针(即地址值)而已。
指针函数的写法
int *fun(int x,int y);
int * fun(int x,int y);
int* fun(int x,int y);
3 函数指针
定义
如果在程序中定义了一个函数,那么在编译时系统就会为这个函数代码分配一段存储空间,这段存储空间的首地址称为这个函数的地址。而且函数名表示的就是这个地址。既然是地址我们就可以定义一个指针变量来存放,这个指针变量就叫作函数指针变量,简称函数指针。
那么这个指针变量怎么定义呢?虽然同样是指向一个地址,但指向函数的指针变量同我们之前讲的指向变量的指针变量的定义方式是不同的。例如:
int(*p)(int, int);
这个语句就定义了一个指向函数的指针变量 p。首先它是一个指针变量,所以要有一个*
,即(*p)
;其次前面的 int 表示这个指针变量可以指向返回值类型为 int 型的函数;后面括号中的两个 int 表示这个指针变量可以指向有两个参数且都是 int 型的函数。所以合起来这个语句的意思就是:定义了一个指针变量 p,该指针变量可以指向返回值类型为 int 型,且有两个整型参数的函数。p 的类型为 int(*)(int,int)
。
函数指针,其本质是一个指针变量,该指针指向这个函数。总结来说,函数指针就是指向函数的指针。
声明格式:类型说明符 (*函数名) (参数)
int (*fun)(int x,int y);
函数指针是需要把一个函数的地址赋值给它,有两种写法:
fun = &Function;
fun = Function;
两种方式均可,其中第二种看上去和普通的函数调用没啥区别,如果可以的话,建议使用第一种,因为可以清楚的指明这是通过指针的方式来调用函数。当然,也要看个人习惯,如果理解其定义,随便怎么用都行啦。
4 C语言函数指针和指针函数总结
C语言中的函数指针和指针函数是两个重要的概念,用于实现函数的灵活调用和返回。下面是对函数指针和指针函数的总结:
一、函数指针(Function Pointer):
- 函数指针是指向函数的指针变量,可以存储和调用函数的地址。
- 声明一个函数指针需要指定函数的返回类型和参数列表。
- 通过函数指针可以在程序运行时动态选择并调用不同的函数。
- 函数指针的声明形式为:
返回类型 (*指针变量名)(参数列表)
。 - 使用函数指针时,可以通过直接调用函数、间接调用函数或将函数指针作为参数传递给其他函数来使用。
二、指针函数(Pointer to Function):
- 指针函数是一个返回指针的函数,即函数的返回类型是指针类型。
- 声明一个指针函数时,需要指定返回的指针类型和参数列表。
- 指针函数可以返回指向某个特定类型的指针,使得函数返回的结果可以是动态分配的内存块或其他数据结构。
- 指针函数的声明形式为:
返回指针类型 函数名(参数列表)
。 - 调用指针函数时,可以直接通过函数名加括号进行调用,并将返回的指针赋值给相应的指针变量。
函数指针和指针函数的应用场景:
- 函数指针可以作为回调函数,用于在特定事件发生时调用不同的函数。
- 函数指针常用于实现函数表或虚函数机制,以实现多态性。
- 指针函数常用于返回动态分配的内存块,并可以根据参数的不同返回不同的结果。
- 函数指针和指针函数提供了灵活的方式来处理函数调用和返回,增加了程序的可扩展性和模块化。
需要注意的是,在使用函数指针和指针函数时,要确保正确的类型匹配和参数的一致性,避免出现类型转换错误和未定义行为。
总结:
函数指针和指针函数是C语言中重要的概念,可以实现函数的灵活调用和返回。函数指针用于存储和调用函数的地址,使得可以在运行时选择不同的函数进行调用;指针函数返回指针类型的结果,使得函数返回的结果可以是动态分配的内存块或其他数据结构。它们在实际开发中具有广泛的应用,能够提高代码的可扩展性和灵活性。
部分内容参考于C语言中文网;一个很不错的编程网站,建议大家多看看。