2012年1月30日 星期一

[C/C++基礎]-函數指標介紹

[C/C++基礎]-函數指標介紹


 


l函數指標”是指向函數的指標變數,因而“函數指標”本身首先應是指標變數。


l只不過該指標變數指向函數。這正如用指標變數可指向整型變數、字元型、陣列一樣,這裏是指向函數。


l如前所述,C/C++在編譯時,每一個函數都有一個進入點位址,該進入點位址就是函數指標所指向的位址。


l有了指向函數的指標變數後,可用該指標變數呼叫函數,就如同用指標變數可引用其他類型變數一樣,在這些概念上一致的。


l函數指標有兩個用途:呼叫函數和做函數的參數。


下面的範例就是一個典型的函數指標應用,有興趣的(C/P)同好,歡迎來(C/P)












程式碼



#include <iostream>

usingnamespace std;

void procreation(int,void (*run)(char*,int)); /* 以函數指標為參數 */

void slow_run_shoes(char*,int);

void leisure_shoes(char*,int);

void spiked_shoes(char*,int);

int main()

{

    int procreation_number;/* 生產項目代號1~3 */

    int size;/* 尺寸 */

    procreation_number=2;

    size=8;

    switch(procreation_number)

    {

        case 1:

            procreation(size,slow_run_shoes); /* 參數列中傳入函數slow_run_shoes的位址 */

            break;

        case 2:

            procreation(size,leisure_shoes); /* 參數列中傳入函數leisure_shoes的位址 */

            break;

        case 3:

            procreation(size,spiked_shoes); /* 參數列中傳入函數spiked_shoes的位址 */

            break;

        default:

            cout <<"停止生產!!!" <<endl;

    }

    getchar();

    return 0;

}

void procreation(int size,void (*run)(char* material,int size))

{

    char* material; /* 質料名稱 */

    int material_number; /* 質料代號1~3 */

    material_number=3;

    switch(material_number)

    {

        case 1:

            material="";

            break;

        case 2:

            material="獸皮";

            break;

        case 3:

            material="塑膠";

    }

    (*run)(material,size); /* 呼叫函數指標 */

}

void slow_run_shoes(char* material,int size)

{

    cout <<"以質料為" <<material <<"、尺寸為" <<size <<"來生產慢跑鞋" <<endl;

}

void leisure_shoes(char* material,int size)

{

    cout <<"以質料為" <<material <<"、尺寸為" <<size <<"來生產休閒鞋" <<endl;

}

void spiked_shoes(char* material,int size)

{

    cout <<"以質料為" <<material <<"、尺寸為" <<size <<"來生產釘鞋" <<endl;

}

 



 


沒有留言:

張貼留言