zoukankan      html  css  js  c++  java
  • 函数指针变量和指针型函数的区别

      在上一篇随笔(顺序表基本操作算法的代码实现)中,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){}这个例子中,指针型       函数的意义是函数返回一个指向整数类型指针变量。

    三、结语

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

  • 相关阅读:
    【2018.05.05 C与C++基础】C++中的自动废料收集:概念与问题引入
    【2018.04.27 C与C++基础】关于switch-case及if-else的效率问题
    【2018.04.19 ROS机器人操作系统】机器人控制:运动规划、路径规划及轨迹规划简介之一
    March 11th, 2018 Week 11th Sunday
    March 10th, 2018 Week 10th Saturday
    March 09th, 2018 Week 10th Friday
    March 08th, 2018 Week 10th Thursday
    March 07th, 2018 Week 10th Wednesday
    ubantu之Git使用
    AMS分析 -- 启动过程
  • 原文地址:https://www.cnblogs.com/jiangcsu/p/5402719.html
Copyright © 2011-2022 走看看