当前位置:   article > 正文

C语言函数指针与指针函数_c语言中函数指针和指针函数

c语言中函数指针和指针函数

在大家刚开始学习c语言的时候,总是分不清函数指针和指针函数,就算是知道了它们之间的区别,也不了解它们的使用场景,

我写此博客帮大家缕一缕,也帮我自己缕一缕

1、函数指针与指针函数的概念以及区别

指针函数

从名字上可以看出,首先它是一个函数,指针指的是返回值为指针

函数指针

从名字上可以看出,首先他是一个指针,并且是指向函数的指针

2、函数指针与指针函数的区别

①概念上的区别:函数指针值得是指向函数的指针,指针函数指的是返回值为至真的函数。

②功能上的区别:指针函数用来编写返回值为指针的函数,而函数指针可以实现c语言的泛型编程(下面会有例子)

3、函数指针的定义

定义一个求和函数:

  1. /*求和函数*/
  2. int sum(int a,int b)
  3. {
  4. return a+b;
  5. }
  6. int (*p)(int a,int b) = sum;/*将指向函数的指针赋给p*/
  7. int (*p)(int a,int b) = ∑
  8. /*这两种种定义的方法都可以定义一个函数指针*/
  9. int c = p(5.6);
  10. intc = *p(5,6);/*两种方法都可以通过指针调用函数*/

4、函数指针和指针函数的应用实例

①先说说指针函数的应用(这个是很简单的)

  1. #include <stdio.h>
  2. int* sum(int a, int b)//返回一个指针
  3. {
  4. static int c = a + b;
  5. return &c;
  6. }
  7. int main()
  8. {
  9. int m,n;
  10. scanf("%d%d",&m,&n);
  11. int c = *sum(m,n);
  12. printf("%d",c);
  13. }

②指针函数的应用(泛型编程)/*重点*/

在c语言里函数是不能够同名的,在以前看来,一个函数只能干对应一件事,比如说写一个由小到大

排序的函数,那么这个函数就只能实现由小到大的排序,要想从大到小排序就得重写一个函数,现在

有了函数指针,我们就可以把指针到一个参数参数传进去,就可以用一个函数实现一个两种排序啦,

代码如下:

  1. #include <stdio.h>
  2. void swap(int *a,int *b)
  3. {
  4. int temp = *a;
  5. *a = *b;
  6. *b = temp;
  7. }
  8. int sort_large_to_small(int a,int b)
  9. {
  10. if(a < b)
  11. {
  12. return 1;
  13. }
  14. return 0;
  15. }
  16. int sort_small_to_large(int a, int b)
  17. {
  18. if(a > b)
  19. {
  20. return 1;
  21. }
  22. return 0;
  23. }
  24. void sort(int n, int* arr, int (*p)(int a,int b))
  25. {
  26. for(int i = 0;i < n;i++)
  27. {
  28. for(int j = 0;j < n-i-1;j++)
  29. {
  30. if(p(arr[j],arr[j+1]))
  31. {
  32. swap(&arr[j],&arr[j+1]);
  33. }
  34. }
  35. }
  36. }
  37. int main()
  38. {
  39. int arr[] = {12,23,65,45,23,34,100,89,90};
  40. int n = sizeof(arr)/sizeof(arr[0]);
  41. sort(n,arr,sort_small_to_large);
  42. printf("由小到大排:");
  43. for(int i = 0;i < n;i++)
  44. {
  45. printf("%d ",arr[i]);
  46. }
  47. printf("\n");
  48. sort(n,arr,sort_large_to_small);
  49. printf("由大到小排:");
  50. for(i = 0;i < n;i++)
  51. {
  52. printf("%d ",arr[i]);
  53. }
  54. printf("\n");
  55. return 0;
  56. }

输出如下:

从代码中可以观察到,我们只是写了一个函数,在冒泡比较的时候控制他们的顺序,

通过函数指针传进去,这样就可以一个函数即可以由小到大排序,也可以由大到小

排序了。这就达到了一定程度上的泛型编程。

 

以上即是函数指针和指针函数的内容,若读者发现错误,欢迎纠错

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

闽ICP备14008679号