C/C++ 函数指针

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

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

函数指针

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

栗子

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]();
}

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

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

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

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

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

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


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

查看所有标签

猜你喜欢:

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

链接

链接

[美]艾伯特-拉斯洛•巴拉巴西 (Albert-László Barabási) / 沈华伟 / 浙江人民出版社 / 2013-8-1 / 59.90元

[内容简介] ★《链接》是《爆发》的作者,艾伯特-拉斯洛•巴拉巴西的成名之作,同时也是复杂网络的奠基之作,社交网络的入门之作。巴拉巴西之前,随机网络理论一直主导者我们的网络思维,是巴拉巴西第一个证明了,我们不是生活在随机世界里,真实网络是无尺度的。 ★巴拉巴西在书中追溯了网络的数学起源,分析了社会学家在此基础上得出的研究成果,最后提出自己的观点:我们周围的复杂网络,从鸡尾酒会、恐怖组织......一起来看看 《链接》 这本书的介绍吧!

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

RGB HEX 互转工具

MD5 加密
MD5 加密

MD5 加密工具

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试