您的位置 首页 知识分享

C 语言函数指针与函数对象有何区别?

函数指针存储函数地址需显式类型转换,而函数对象通过重载运算符实现,不需要类型转换。函数指针通过指针调用,而函数…

函数指针存储函数地址需显式类型转换,而函数对象通过重载运算符实现,不需要类型转换。函数指针通过指针调用,而函数对象直接调用。函数指针固定,而函数对象因对象而异,使用时函数指针用于传递函数,函数对象用于封装函数行为。

C 语言函数指针与函数对象有何区别?

C 语言:函数指针与函数对象的区别

函数指针和函数对象是 C 语言中表示函数的方式,它们之间有一些重要的区别。

函数指针

  • 是一种指向函数的指针。
  • 存储在内存中函数的地址。
  • 必须显式转换类型为函数指针。

语法:

int (*ptr)(int, int); // 指向接受两个 int 参数并返回 int 的函数
登录后复制

函数对象

  • 表示一个可以作为对象调用的函数。
  • 类似于 C++ 中的函数对象。
  • 通过重载调用运算符 (()) 来实现。

语法:

struct FuncObj {   int operator()(int a, int b) {     return a + b;   } };
登录后复制

区别

特征 函数指针 函数对象
存储 内存地址 内存对象
类型转换 需要类型转换 不需要类型转换
调用 通过指针调用 直接调用
内存占用 相同 因对象而异
用途 用于传递函数 封装函数行为

实战案例

下例展示了函数指针和函数对象的用法:

#include <iostream>  // 函数指针 int add(int a, int b) {   return a + b; }  // 函数对象 struct Add {   int operator()(int a, int b) {     return a + b;   } };  int main() {   // 函数指针   int (*ptr)(int, int) = add;   std::cout << ptr(1, 2) << std::endl; // 输出 3    // 函数对象   Add addObj;   std::cout << addObj(1, 2) << std::endl; // 输出 3 }
登录后复制

以上就是C 语言函数指针与函数对象有何区别?的详细内容,更多请关注php中文网其它相关文章!

本文来自网络,不代表甲倪知识立场,转载请注明出处:http://www.spjiani.cn/wp/3040.html

作者: nijia

发表评论

您的电子邮箱地址不会被公开。

联系我们

联系我们

0898-88881688

在线咨询: QQ交谈

邮箱: email@wangzhan.com

工作时间:周一至周五,9:00-17:30,节假日休息

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

关注微博
返回顶部