当前位置:   article > 正文

C语言【指针】函数指针和指针函数用法和区别_函数指针跟普通指针区别

函数指针跟普通指针区别

首先我们能先来看这两种概念的写法:

函数指针:int (*f)(int x,int y);

指针函数:int *f(int x,int y);

函数指针本质是一个指针,其指向一个函数。

指针函数本质是一个函数,其返回值为指针。

指针函数

定义

指针函数,简单的来说,就是一个返回指针的函数,其本质是一个函数,而该函数的返回值是一个指针。
声明格式为:*类型标识符 函数名(参数表) 

指针函数的写法

  1. int *fun(int x,int y);
  2. int * fun(int x,int y)
  3. int* fun(int x,int y);

示例

对于指针函数来说:

它本身是一个函数,那么就和普通的函数一样会有一个返回值,普通函数的返回值就是一个数值,

例如下面这段代码的返回值是零

  1. int f()
  2. {
  3. ..............
  4. return 0

那么指针函数的返回值是一个指针,也就是一个地址

  1. #include <stdio.h>
  2. #include<stdlib.h>
  3. int c;
  4. //这里定义add和sub都是指针函数,返回的都是一个指针即一个地址。
  5. int * add(int x, int y)
  6. {
  7. c=x + y;
  8. return &c;
  9. }
  10. int * sub(int x, int y)
  11. {
  12. c = x -y;
  13. return &c;
  14. }
  15. /*这是一个指针函数*/
  16. int * (*fdate)(int x,int y);
  17. int main()
  18. {
  19. printf("1+2= %d\n", *add(1, 2));//对指针函数取值 1+2= 3
  20. fdate= add;
  21. printf("1+2= %d\n", *(*fdate)(1, 2));//*fdate是对add取值*(*fdate)是对* (*fdate)取值 1+2= 3
  22. fdate= sub;
  23. printf("1-2= %d\n", *(*fdate)(1, 2));1-2= -1
  24. }

函数指针

定义

函数指针,其本质是一个指针变量,该指针指向这个函数。总结来说,函数指针就是指向函数的指针。
声明格式:类型说明符 (*函数名) (参数)

函数指针写法

如下:

int (*fun)(int x,int y);

函数指针是需要把一个函数的地址赋值给它,有两种写法:

  1. fun = &Function;
  2. fun = Function;

取地址运算符&不是必需的,因为一个函数标识符就表示了它的地址,如果是函数调用,还必须包含一个圆括号括起来的参数表。

函数指针的调用

调用函数指针的方式也有两种:

  1. x = (*fun)();
  2. x = fun();

两种方式均可,其中第二种看上去和普通的函数调用没啥区别,如果可以的话,建议使用第一种,因为可以清楚的指明这是通过指针的方式来调用函数

示例

  1. #include <stdio.h>
  2. #include<stdlib.h>
  3. int add(int x, int y)
  4. {
  5. return x + y;
  6. }
  7. int sub(int x, int y)
  8. {
  9. return x - y;
  10. }
  11. /*这是一个函数指针,因为()的优先级大于*的有限级,但是(*f)排在前边,所示这是一个指针,
  12. 函数指针就是一个指针,他和变量指针一样,指向的都是一个地址,例如变量指针(也就是我们常说的指针)指向的是这个变量的地址
  13. 而函数指针,指向的是这个函数的地址
  14. */
  15. int (*f)(int x, int y);//定义了一个函数指针
  16. int main()
  17. {
  18. f = &add;//因为f是一个函数指针,也就是一个指针,那么就是一个地址,现在取函数add的地址赋给f,也就是函数f的功能等同于函数add的功能
  19. printf("1+2= %d\n",(*f)(1,2));
  20. f = &sub;
  21. printf("1-2= %d\n",(*f)(1,2));
  22. }

结果

1+2= 3
1-2= -1

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/数据灵魂/article/detail/63267
推荐阅读
相关标签
  

闽ICP备14008679号