大家好,又见面了,我是你们的朋友全栈君。
C++函数指针、指针函数、返回值为函数指针的函数浅谈
引言
函数指针、指针函数是C中重要而容易混淆的概念,博主将通过两个实例来说明这两个截然不同的概念。
而返回值为函数指针的指针函数就更难理解了,放在文章的最后来介绍。
函数指针
函数指针是一种特殊的 指针,它指向函数的入口。
例如int (*add)(int, int);
定义了一个函数指针add,用于指向返回值为int,并且有两个int参数的函数,下面用实例来说明
/**
* 作者:lyn
* 时间:2018.10.30
* 此程序用来演示函数指针
*/
#include<iostream>
using namespace std;
int addfunc(int a, int b) {
return a + b;
}
int main() {
int (*add)(int, int) = addfunc;
//两种方法都可以
//int (*add)(int, int) = &addfunc;
int result = (*add)(1, 2);
//两种方法都可以,建议使用第一种
//int result = add(1, 2);
cout << "通过函数指针调用函数进行计算结果:" << result << endl;
result = addfunc(1, 2);
cout << "通过直接调用函数进行计算结果:" << result << endl;
return 0;
}
指针函数
指针函数是一种返回值为指针的 函数。
例如A *createA();
声明了一个返回值为指向A类型的指针的,参数列表为空的函数(这句话读起来可能有一··绕口),实例说明
/**
* 作者:lyn
* 时间:2018.10.30
* 该程序用来演示指针函数
*/
#include<iostream>
using namespace std;
class A {
public:
A(int a) {
this->a = a;
}
int getA(){
return a;
}
private:
int a;
};
//返回值为指向类型A的指针的函数
A *createA() {
return new A(1);
}
int main(){
//创建一个指向A类型的指针,并调用createA创建一个A类型的对象
A* b = createA();
//通过指针调用类的方法
cout << "b->a = " << b->getA() << endl;
return 0;
}
返回值为函数指针的函数
其实在搞懂了函数指针和指针函数后,这个概念并不难懂,其实这就是一个复杂一点的指针函数,因为他的返回值为函数指针。
先给一个例子:
/*
*本例是SGISTL源码中的一个函数,比普通的返回值为函数指针的函数要更复杂一点
*因为本例中函数的参数也是一个函数指针
*/
void (* set_malloc_handler(void (*f)()))()
我们把例子从里往外看
void (*f)()
是一个函数指针,它用于指向一个返回值为void,无参数列表的函数
* set_malloc_handler(void (*f)())
这是一个指针函数,返回值为指针,它有一个参数,参数为一个函数指针(返回值为void,无参数列表的函数)
void (* set_malloc_handler(void (*f)()))()
这是一个指针函数,返回值为函数指针(返回值为void,无参数列表的一个函数),它有一个参数,参数为一个函数指针
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/152178.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...