探討C語言中的回呼函數

來源:互聯網
上載者:User

http://www.blogjava.net/huyi2006/articles/180169.html

回呼函數是一個程式員不能顯式調用的函數;通過將回呼函數的地址傳給
調用者從而實現調用。回呼函數使用是必要的,在我們想通過一個統一介面實現不

同的內容,這時用回掉函數非常合適。比如,我們為幾個不同的裝置分別寫了不同
的顯示函數:void TVshow(); void
ComputerShow(); void NoteBookShow()...等
等。這是我們想用一個統一的顯示函數,我們這時就可以用回掉函數了。void
sho
w(void (*ptr)()); 使用時根據所傳入的參數不同而調用不同的回呼函數。

      不同的程式設計語言可能有不同的文法,下面舉一個c語言中回呼函數的例子,
其中一個回呼函數不帶參數,另一個回呼函數帶參數。

      例子1:
//Test.c
#include <stdlib.h>
#include
<stdio.h>
int Test1()
{
  int i;
  for (i=0; i<30; i++)

  {
printf("The %d th charactor is: %c\n", i, (char)('a' + i%26));

  }
  return 0;
}
int Test2(int num)
{
  int i;

  for (i=0; i<num; i++)
  {
   printf("The %d th charactor is:
%c\n", i, (char)('a' + i%26));

  }
  return 0;
}
void
Caller1(void (*ptr)())//指向函數的指標作函數參數
{
  (*ptr)();
}
void
Caller2(int n, int (*ptr)())//指向函數的指標作函數參數,這裡第一個參數是為指向函數的指標服務的,
{
                                              //不能寫成void Caller2(int (*ptr)(int
n)),這樣的定義語法錯誤。
  (*ptr)(n);
  return;
}
int main()
{

  printf("************************\n");
  Caller1(Test1);
//相當於調用Test2();

  printf("&&&&&&************************\n");

  Caller2(30, Test2); //相當於調用Test2(30);
  return 0;
}

      以上通過將回呼函數的地址傳給調用者從而實現調用,但是需要注意的是帶

參回呼函數的用法。要實現回調,必須首先定義函數指標。函數指標的定義這裡稍
微提一下。比如:
    int (*ptr)();
這裡ptr是一個函數指標,其中(*ptr)的括弧不能省略,因為
括弧的優先順序高於星號,那樣就成了一個傳回型別為整型的函式宣告了

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.