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

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

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

三、结语

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

猜你喜欢

转载自blog.csdn.net/dell17951/article/details/83024885