• 函数指针变量和指针型函数的区别


      在上一篇随笔(顺序表基本操作算法的代码实现)中,LocateElem()函数的第三个形参的形式是:

        Status (*compare)(Elemtype e,Elemtype temp);

      这是一个函数指针变量,借此机会记录一下函数指针变量和指针型函数的区别。

    一、写法上的区别

    函数指针变量 指针型函数
    int (*function)(int i); int  *function(int i){}

      上面是一个例子,可看到函数指针变量只是在:*function处比指针型函数多了一对小括号,下面是两者的一般形式:

    函数指针变量:

    类型类型说明符 (*指针变量名)(形参表);

    指针型函数:

    类型说明符 *函数名(形参表){

    }

    二、概念上区别

    • 函数指针变量:指向函数入口的指针变量(本质是变量)

        在随笔的开头,LocateElem函数的形参中就有一个函数指针变量,在函数的调用过程中,只要将真正要使用的函数名作为实参传递,就可以调用改函数。为什么会这样           呢?因为函数在使用时,函数的名称就像数组名一样表示了一个地址,名称指向了函数的入口地址。通过将函数名赋值给一个函数指针变量,这个函数指针变量就指向了一个         特定函数;类似于定义一个变量,将数组的首地址赋值给该变量,就可以通过该指针处理这个数组。

    • 指针型函数:返回值为指针类型的函数(本质是函数)

        既然只指针型函数的本质是一个函数,则它一定具有相应的函数体。而这个函数与一般函数的区别就是他的返回值是一个指针类型,这里有点迷惑人的地方是:

          函数头上已经写了返回值的类型说明符是int(见一中的例子),为什么又说返回值是一个指针类型呢?这个理解是有些偏差的。

        首先要清楚的是,定义一个指针变量,是得要确定指针指向的变量类型的。比如说:int *p;

      上个语句执行后,会产生一个指针p,他指向一个整数类型。以此类推,在指针型函数中,类型说明符是对指针变量的一个说明,在int  *function(int i){}这个例子中,指针型       函数的意义是函数返回一个指向整数类型指针变量。

    三、结语

      在分辨这两个概念时,只要时刻谨记他们的本质就可以:函数指针变量本质是变量,那么对于变量的一切操作,它都兼容;指针型函数是一个函数,只是说函数的返回值比较特殊,是一个指向类型说明符的指针变量。

  • 相关阅读:
    【Codecs系列】之NVIDIA Jetson TX1简介
    【Life系列】之工作与生活的关系《赢在下班后》
    【Bugs系列】之could not find or load the Qt platform plugin windows解决方案
    【Books系列】之第一本书:大冰《好吗好的》读书笔记和读后感
    【Qt系列】之Qt之打包发布
    【Life系列】之我在底层的生活
    【Life系列】之关于工作和生活的思考与反思
    【Tools系列】之WORD转成PDF并生成书签
    【Tools系列】之Excel冻结窗格
    【Script系列】之CMake学习总结
  • 原文地址:https://www.cnblogs.com/jiangcsu/p/5402719.html
Copyright © 2020-2023  润新知