指针函数

定义

  • 指针函数,简单来说就是返回一个指针的函数,其本质是一个函数,函数的返回值是一个指针。
  • 声明格式为:* 类型标识符 函数名称(参数表)

举例说明:
首先声明一个函数
int fun(int x,int y)
这是一个普通的函数,函数名称是fun,返回类型是一个int型,参数是 int x和int y
接着往下
int *fun(int x,int y)
这个函数就是一个指针函数,其中返回值是一个int*,指针函数的声明就是在返回类型上添加了一个指针。
指针函数的写法以下几种都可以

int *fun(int x,int y)
int * fun(int x,int y)
int* fun(int x,int y)

个人建议指针靠近类型,这样更容易理解。
使用示例:

typedef struct _Data{
    int a;
    int b;
}Data;

//指针函数
Data* f(int a,int b){
    Data * data = new Data;
    data->a = a;
    data->b = b;
    return data;
}

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    //调用指针函数
    Data * myData = f(4,5);
    qDebug() << "f(4,5) = " << myData->a << myData->b;

    return a.exec();
}

f(4,5) =  4 5

函数指针

定义

  • 函数指针,其本质是一个指针变量,该指针指向这个函数,总结来说,函数指针就是指向函数的指针。
  • 声明格式:类型说明符(*函数名)(参数)
    如下:
    int (*fun)(int x,int y)
    函数指针是需要把一个函数的地址赋值给对方
fun = &Function;
fun = Function;

取地址运算符&不是必需的,因为一个函数标识符就表示了它的地址,如果是函数调用,还必须包含一个圆括号括起来的参数表。
调用函数指针的方法如下:

x = (*fun)();
x = fun();

代码示例:

int add(int x,int y){
    return x+y;
}
int sub(int x,int y){
    return x-y;
}
//函数指针
int (*fun)(int x,int y);

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    //第一种写法
    fun = add;
    qDebug() << "(*fun)(1,2) = " << (*fun)(1,2) ;
    //第二种写法
    fun = ⊂
    qDebug() << "(*fun)(5,2) = " << (*fun)(5,3)  << fun(5,3);

    return a.exec();
}

输出如下:

(*fun)(1,2) =  3
(*fun)(5,2) =  2 2

二者区别

定义不同

指针函数本质是一个函数,返回值是一个指针
函数指针本质是一个指针,指向函数的一个指针
为了方便记忆,指针函数和函数指针可以这样记忆,谁在后面本质就是谁,函数在后面其本质就是一个函数,返回值是指针,指针在后面其本质就是一个指针,是一个指向函数的指针

写法不同

指针函数 类型 *函数名称(参数表)
**函数指针 类型 (函数名称)(参数表)***
可以简单粗暴的理解为,指针函数的是属于数据类型的,而函数指针的星号是属于函数名的。
再简单一点,可以这样辨别两者:函数名带括号的就是函数指针,否则就是指针函数。

用法不同

1 个评论

  1. 通告:C++ callBackFunction - 吴晓宁博客

发表评论

电子邮件地址不会被公开。 必填项已用*标注