zoukankan      html  css  js  c++  java
  • 函数指针简单了解

    什么是函数指针,简单来看,其实它还是一个指针,只不过它指向一个函数,下面看一个简单的例子

     1 #include<stdio.h>
     2 int max(int x,int y)                            //定义一个函数用来返回两个数中较大的一个
     3 {
     4         return (x>y?x:y);    
     5 }
     6 int main()
     7 {
     8         int (*ptr)(int x,int y);                //定义一个函数指针,指向的函数返回值为int型,还有两个int型参数
     9         int a,b,c;
    10         ptr=max;                                //把max函数的地址赋给ptr这个函数指针
    11         scanf("%d %d",&a,&b);
    12         c=(*ptr)(a,b);                          //通过调用ptr这个函数指针来来调用max函数 
    13         printf("a=%d,b=%d,max=%d",a,b,c);
    14         return 0;
    15 }

    其中第10行与ptr=&max 相同,函数名即为函数的地址,所以加不加&都可以。

    第12行表示用一个函数指针去调用函数,还可以改为 c=ptr(a,b),这样表示直接用函数名去调用函数。

    函数指针定义的时候要表明它指向函数的返回值的数据类型,还有参数个数以及各个参数的数据类型。

    好了,了解什么是函数指针,再来看道题吧

     1 #include<stdio.h>
     2 int get_big(int i,int j)                                //一个求最大值的函数
     3 {
     4         return i>j?i:j;
     5 }
     6 int get_max(int i,int j,int k,int(*p)(int,int))         //这个函数有四个参数,其中一个为函数指针
     7 {
     8         int ret;
     9         ret=p(i,j);                                     //通过该指针调用get_big函数
    10         ret=p(ret,k);
    11         return ret;
    12 }
    13 int main()
    14 {
    15         int i=5,j=10,k=15,ret;
    16         ret=get_max(i,j,k,get_big);                     //实参最后一个参数为函数名,传递给形参函数指针
    17         printf("The max is %d",ret);
    18         return 0;
    19 }

    函数指针还可以作为形参,当传递到一个函数内时,可以用该指针调用其他函数。

    再看看其他例子

     1 #include<stdio.h>
     2 int get_big(int i,int j)                        //一个求最大值的函数
     3 {
     4         return i>j?i:j;
     5 }
     6 int (*get_function(int a))(int,int)    
     7 /*定义了一个get_function函数,该函数的返回值是一个函数指针,函数指针指向的函数返回值为int型,而且有两个int型参数*/
     8 {
     9         printf("the number is %d
    ",a);
    10         return get_big;
    11 }
    12 
    13 int main()
    14 {
    15         int i=5,j=10,max;
    16         int (*p)(int,int);                      //定义函数指针
    17         p=get_function(100);                    //将get_function的返回值赋给p这个函数指针
    18         max=(*p)(i,j);                          //通过p调用get_big函数
    19         printf("the max is %d",max);
    20         return 0;
    21 
    22 
    23 }

    函数指针也可以作为一个函数的返回值的。

    以上内容部分来自《linux c编程实战》这本书。

  • 相关阅读:
    随机抢红包算法实现
    C#Random函数在循环中每次获取一样的值
    YouTube Cobalt 浏览器支持
    原生js,通过document.getElementByClassName获取元素的索引值
    http请求415错误Unsupported Media Type
    axios
    vue项目中,localhost可以访问,IP无法访问的问题
    时间戳
    Vue.Draggable:基于 Sortable.js 的 Vue 拖拽组件使用中遇到的问题
    empty 与 remove 的区别
  • 原文地址:https://www.cnblogs.com/kingos/p/4516951.html
Copyright © 2011-2022 走看看