指针函数
定义
- 指针函数,简单来说就是返回一个指针的函数,其本质是一个函数,函数的返回值是一个指针。
- 声明格式为:* 类型标识符 函数名称(参数表)
举例说明:
首先声明一个函数
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
二者区别
定义不同
指针函数本质是一个函数,返回值是一个指针
函数指针本质是一个指针,指向函数的一个指针
为了方便记忆,指针函数和函数指针可以这样记忆,谁在后面本质就是谁,函数在后面其本质就是一个函数,返回值是指针,指针在后面其本质就是一个指针,是一个指向函数的指针
写法不同
指针函数 类型 *函数名称(参数表)
**函数指针 类型 (函数名称)(参数表)***
可以简单粗暴的理解为,指针函数的是属于数据类型的,而函数指针的星号是属于函数名的。
再简单一点,可以这样辨别两者:函数名带括号的就是函数指针,否则就是指针函数。
通告:C++ callBackFunction - 吴晓宁博客