C/C++ 函数指针

栏目: C · 发布时间: 5年前

内容简介:函数是存放在内存的代码区域内由于虚函数是偏移量,所以取得的只是一个索引,即在虚函数表的偏移地址非虚函数,返回的是在内存中的真实地址

函数指针

函数是存放在内存的代码区域内

栗子

int test(int a){
    return a;
}
int main(int argc, const char * argv[]){
    // 这里定义了一个参数为int类型的函数,函数的返回值为int类型的指针fp
    int (*fp)(int a);
    // 将test函数的地址赋值给指针fp,完成一个指向函数。该指针指向的函数的参数为int类型
    fp = test;
    // 调用test函数,这里返回的值为2
    cout << fp(2) << endl;
    return 0;
}

使用typedef

int test(int a){
    return a;
}
int main(int argc, const char* argv[]){
    // 定义一个指向函数的类型
    typedef int (*fp)(int a);
    // 定义了一个指向函数类型的变量f
    fp f = test;
    // 进行调用
    cout << f(2) << endl;
    return 0;
    
}

函数指针作为参数传递给函数

int test(int a){
    return a - 1;
}
// (*fun)(int) 定义了一个int类型返回值也为int类型的函数指针fun
int test2(int (*fun)(int), int b){
    // 这里调用fun指针指向的函数,其传入的参数为10
    int c = fun(10) + b;
    
}
int main(int argc, const char * argv[]){
    // 定义函数指针
    typedef int (*fp)(int a);
    fp f = test;
    //  调用test2的时候,由于指针f指向test函数的地址,将tets函数的地址作为参数传递给test2,然后tets2再次调用test并传入值为10
    cout << test2(f, 1) << endl;
}

指向函数的指针数组

void t1(){
    cout << "test1" << endl;
}
void t2(){
    cout << "test2" << endl;
}
void t3(){
    cout << "test3" << endl;
}
int main(int argc, const char * argv[]){
    // 定义一个参数为空的函数指针
    typedef void (*fp)(void)
    // 定义一个指向函数的指针数组
    fp b[] = {t1, t2, t3};
    // 这时通过数组下标,间接的调用
    b[0]();
}

指向类成员函数的函数指针

由于虚函数是偏移量,所以取得的只是一个索引,即在虚函数表的偏移地址

非虚函数,返回的是在内存中的真实地址

普通函数指针保存的是函数体开始的地址,即,代码指针。

数据指针 用于保存数据的指针

由于虚函数的存在,所以在在类的成员函数指针在调用的时候需要传入类的实例化后的对象,用于找到虚函数在内存中的函数体开始的地址。


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Servlet与JSP核心编程

Servlet与JSP核心编程

[美]Marty Hall、Larry Brown、Yaakov Chalkin / 胡书敏 / 2009-6 / 68.00元

《Servlet与JSP核心编程(第2卷 第2版)》在第l卷的基础上,广泛涉及自定义标签库、过滤器、声明式安全、JSTL和Struts等主题,并沿袭深受读者喜爱的写作风格,通过完整、有效、资料丰富的程序来演绎目前最流行的技术和最佳实践。Java EE已经成为电子商务网站、动态网站和Web应用与服务开发的首选,作为这一平台的基础,servlet与JSP的重要性日益突出,并在极短的时间内得以迅速普及。......一起来看看 《Servlet与JSP核心编程》 这本书的介绍吧!

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

SHA 加密
SHA 加密

SHA 加密工具