zoukankan      html  css  js  c++  java
  • 指针函数 和 函数指针

    指针函数

      可以根据字面意思理解为:返回值为指针的函数。

      他的本质是一个函数,跟其他函数的区别就在于,指针函数的返回值类型是指针。

      举个例子:

    int fuc(void)
    {
        return 5;
    }

      这个函数fuc返回值是int类型,并且返回值为5.

      那么指针函数什么样呢?

    int *fuc(void)
    {
        return 5;
    }

      这个函数也是fuc,跟上面函数不同的是,他返回值是int * 类型,也就是返回一个指针,这个指针指向int整形数字5的地址。

      使用指针函数时要注意,传出的指针不要指向局部变量的地址

      比如:

    int *fuc(void)
    {
        int a = 5;
        return a;
    }

      这个例子就是错误的,(当然,如果不是指针函数,那么这种用法没有问题)

      本例中返回值为int形a的地址,但是a是局部变量,再fuc结束之时局部变量被回收,所以我们不可能得到5这个数字。

    函数指针

      根据字面意思来理解,函数指针就是:指向函数的 指针。

      他的本质是一个指针,我们平时使用指针

      比如:

    int a = 5;
    int *p;
    p = a ;

      指针p指向了一个整型数字a的地址,这个地址里存着的就是数字5.

      那么函数指针,指向了一个函数

    int (*p)(int);

      这个函数指针的名字是p,指向一个参数为int 返回值为int的函数,或者这样表达,指针p指向的函数类型为  int ()(int)

      

      根据我的理解,函数指针和其他的指针在基本的使用上是一样的,就是说,这个指针名字,可以替代函数名字出现

    int fuc(void)
    {
        int a = 5;
        return a;
    }
    
    int main(int argc, char const *argv[])
    {
        int (*p)(void);
        p = fuc;
        printf("%d
    ", fuc());
        printf("%d
    ", p());
        printf("%d
    ", (*p)());
        return 0;
    }

      函数指针p指向了fuc这个函数,所以 fuc() 和 p() 就是等价的,而 p() 跟 (*p)()是一样的,所以编译后输出结果是:

    5
    5
    5

      这里注意,如果我用

        printf("%d
    ", *p());

      这就是错误的用法。

      既然它的本质是指针,那么我们就也可以把这个指针当作参数 传入另一个函数

    int plus(int x,int y)
    {
        return x + y ;
    }
    
    int jian(int x,int y)
    {
        return x - y;
    }
    
    int jisuan(int (*p)(int,int),int x,int y)
    {
        return (*p)(x,y);
    }
    
    int main(int argc, char const *argv[])
    {
    
        printf("%d
    ", jisuan(jian,1,2));
        printf("%d
    ", jisuan(plus,1,2));
    
        return 0;
    }

      本例中我们将 int (*p)(int,int) 作为参数传入了其他的函数中,达到了用一个函数去灵活调用其他同类型函数的目的。

  • 相关阅读:
    1203 有穷自动机
    [转]HTTP协议详解
    JavaScript中的正则表达式
    [译]JavaScript insertAdjacentHTML
    [译]Autoprefixer:用最可行的方式处理浏览器前缀的CSS后处理器
    [译]JavaScript 错误和处理
    [译]CSS content
    [译]当你在浏览器输入url后发生了什么
    display的小故事
    移动web屏幕适配方案
  • 原文地址:https://www.cnblogs.com/qifeng1024/p/12452893.html
Copyright © 2011-2022 走看看