typedef與函數指標

來源:互聯網
上載者:User
在typedef的使用中,最麻煩的是指向函數的指標,如果沒有下面的函數,你知道下面這個運算式的定義以及如何使用它嗎?

  int (* s_calc_func( char op))( int, int); 如果不知道,請看下面的程式,裡面有比較詳細的說明    // 定義四個函數 int add( int, int); int sub( int, int); int mul( int, int); int div( int, int); // 定義指向這類函數的指標 typedef int (* FP_CALC)( int, int);  // 我先不介紹,大家能看懂下一行的內容嗎? int (* s_calc_func( char op))( int, int);  // 下一行的內容與上一行完全相同, // 定義一個函數 calc_func ,它根據操作字元 op 返回指向相應的計算函數的指標 FP_CALC calc_func( char op);   // 根據 op 返回相應的計算結果值 int calc( int a, int b, char op);  int add( int a, int b){    return a + b;} int sub( int a, int b){    return a - b;} int mul( int a, int b){    return a * b;} int div( int a, int b){    return b? a/b : -1;} // 這個函數的用途與下一個函數作業和調用方式的完全相同, // 參數為 op ,而不是最後的兩個整形 int (*s_calc_func( char op)) ( int, int){    return calc_func(op);}  FP_CALC calc_func( char op){    switch (op)    {    case '+': return add;    case '-': return sub;    case '*': return mul;    case '/': return div;    default:        return NULL;    }    return NULL;}  int calc( int a, int b, char op){    FP_CALC fp = calc_func(op); // 下面是類似的直接定義指向函數指標變數       // 下面這行是不用 typedef ,來實現指向函數的指標的例子,麻煩!        int (*s_fp)( int, int) = s_calc_func(op);        // ASSERT(fp == s_fp); // 可以斷言這倆是相等的    if (fp) return fp(a, b);    else return -1;}  void test_fun(){    int a = 100, b = 20;    printf("calc(%d, %d, %c) = %d\n", a, b, '+', calc(a, b, '+'));    printf("calc(%d, %d, %c) = %d\n", a, b, '-', calc(a, b, '-'));    printf("calc(%d, %d, %c) = %d\n", a, b, '*', calc(a, b, '*'));    printf("calc(%d, %d, %c) = %d\n", a, b, '/', calc(a, b, '/'));}  運行結果   calc(100, 20, +) = 120   calc(100, 20, -) = 80   calc(100, 20, *) = 2000   calc(100, 20, /) = 5

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.