设为首页 加入收藏

TOP

C++指向函数的指针
2013-11-20 14:24:40 来源: 作者: 【 】 浏览:191
Tags:指向 函数 指针

  C++函数代码也和对象一样,都是保存在内存中的,所以函数也是有内存地址的。但是函数指针是不予许修改的。只可以有两种操作 1. 调用函数, 2 获取其地址。

  [cpp

  void error(string s) { /*函数内容*/ }

  void (*efct)(string); // 确定函数指针的类别

  void f()

  {

  efct = &error; // efct points to error

  efct("error"); // call error through efct

  }

  函数指针和一般指针不同,用和不用*操作都是可以的。

  同理,用和不用&操作都是可以的:

  [cpp]

  void (?f1)(string) = &error; // OK: same as = error

  void (?f2)(string) = error; // OK: same as = &error

  void g()

  {

  f1("Vasa"); //OK: same as (*f1)("Vasa")

  (*f1)("Mary Rose"); // OK: as f1("Mary Rose")

  }

  函数指针类型一定要注意匹配:

  [cpp]

  void (*pf)(string); // pointer to void(string)

  void f1(string); // void(str ing)

  int f2(string); // int(string)

  void f3(int*); //void(int*)

  [cpp]

  void f()

  {

  pf = &f1; // OK

  pf = &f2; // error : bad return type,should be pointer

  pf = &f3; // error : bad argument type, should be pointer

  pf("Hera"); // OK

  pf(1); //error : bad argument type

  int i = pf("Zeus"); // error : void assigned to int

  }

  函数指针是广泛地用在C-style代码中,作为其他函数的参数的。

  不过在C++中比较少用了。C++应该使用functor,如下:

  [cpp]

  int main()

  {

  cout 《 "Heads in alphabetical order:\n";

  sort(heads.begin(), head.end(),

  [](const User& x, const User& y) { return x.name<y.name; }

  );

  print_id(heads);

  cout 《 '\n';

  cout 《 "Heads in order of department number:\n";

  sort(heads.begin(), head.end(),

  [](const User& x, const User& y) { return x.dept<y.dept; }

  );

  print_id(heads);

  }

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇C++ - 重载I/O操作符的.. 下一篇剖析变长参数函数的实现

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·HyperText Transfer (2025-12-26 07:20:48)
·半小时搞懂 HTTP、HT (2025-12-26 07:20:42)
·CPython是什么?PyPy (2025-12-26 06:50:09)
·Python|如何安装seab (2025-12-26 06:50:06)
·python要学习数据分 (2025-12-26 06:50:03)