亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

函數指針有什么意義?

函數指針有什么意義?

C++ C
慕工程0101907 2019-07-26 15:07:07
函數指針有什么意義?我很難看到函數指針的實用程序。我想它在某些情況下可能是有用的(畢竟它們存在),但我想不出使用函數指針更好或不可避免的情況。你能舉出一些好用函數指針的例子(在C或C ++中)嗎?
查看完整描述

3 回答

?
飲歌長嘯

TA貢獻1951條經驗 獲得超3個贊

大多數示例歸結為回調:您調用一個函數f()傳遞另一個函數的地址g(),并f()調用g()某些特定任務。如果您傳遞f()h()相反的地址,f()則會回撥h()。

基本上,這是一種參數化函數的方法:其行為的某些部分不是硬編碼的f(),而是進入回調函數。f()調用者可以通過傳遞不同的回調函數來使行為不同。經典qsort()來自C標準庫,它將其排序標準作為指向比較函數的指針。

在C ++中,這通常使用函數對象(也稱為仿函數)來完成。這些是重載函數調用操作符的對象,因此您可以像調用函數一樣調用它們。例:

class functor {
  public:
     void operator()(int i) {std::cout << "the answer is: " << i << '\n';}};functor f;f(42);

這背后的想法是,與函數指針不同,函數對象不僅可以攜帶算法,還可以攜帶數據:

class functor {
  public:
     functor(const std::string& prompt) : prompt_(prompt) {}
     void operator()(int i) {std::cout << prompt_ << i << '\n';}
  private:
     std::string prompt_;};functor f("the answer is: ");f(42);

另一個優點是,與通過函數指針調用相比,有時更容易內聯調用函數對象。這就是為什么在C ++中排序有時比在C中排序更快的原因。


查看完整回答
反對 回復 2019-07-26
?
慕萊塢森

TA貢獻1810條經驗 獲得超4個贊

好吧,我通常在跳轉表中使用它們(專業)(另請參閱此StackOverflow問題)。

跳轉表通常(但不是唯一地)用于有限狀態機中以使它們被數據驅動。而不是嵌套的開關/案例

  switch (state)
     case A:
       switch (event):
         case e1: ....
         case e2: ....
     case B:
       switch (event):
         case e3: ....
         case e1: ....

你可以制作一個2d數組或函數指針,然后調用 handleEvent[state][event]


查看完整回答
反對 回復 2019-07-26
?
皈依舞

TA貢獻1851條經驗 獲得超3個贊

例子:

  1. 自定義排序/搜索

  2. 不同的模式(如戰略,觀察者)

  3. 回調


查看完整回答
反對 回復 2019-07-26
  • 3 回答
  • 0 關注
  • 1679 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號