c语言指针用在子函数里面(CC函数指针)

 2025-08-27  阅读 226  评论 0

摘要:函数是存放在内存的代码区域内int test(int a){return a;}int main(int argc, const char * argv[]){// 这里定义了一个参数为int类型的函数,函数的返回值为int类型的指针fpint (*fp)(int a);// 将test函数的地

函数是存放在内存的代码区域内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; } ,我来为大家科普一下关于c语言指针用在子函数里面?以下内容希望对你有帮助!

c语言指针用在子函数里面(CC函数指针)

c语言指针用在子函数里面

函数指针

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

栗子

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

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

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

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

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

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

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

,

版权声明:xxxxxxxxx;

原文链接:http://cn.tdroid.net/ce139Cz0HCwgHVF0.html

发表评论:

管理员

  • 内容295603
  • 积分0
  • 金币0
关于我们
lecms主程序为免费提供使用,使用者不得将本系统应用于任何形式的非法用途,由此产生的一切法律风险,需由使用者自行承担,与本站和开发者无关。一旦使用lecms,表示您即承认您已阅读、理解并同意受此条款的约束,并遵守所有相应法律和法规。
联系方式
电话:
地址:广东省中山市
Email:
注册登录
注册帐号
登录帐号

Copyright © 2022 太卓开发网 Inc. 保留所有权利。 泰达科技网易库网

页面耗时0.1057秒, 内存占用1.33 MB, 访问数据库18次