指向函數(shù)的指針變量作函數(shù)參數(shù)

字號(hào):

指向函數(shù)的指針變量主要用于作函數(shù)參數(shù),以實(shí)現(xiàn)“函數(shù)”作函數(shù)的參數(shù),便于編制通 用程序。此時(shí)形參用指向函數(shù)的指針變量,而實(shí)參是實(shí)際函數(shù)的入口地址(函數(shù)名),當(dāng)然 實(shí)參也可以是指向?qū)嶋H函數(shù)的指針變量。
    例編制程序,調(diào)用一個(gè)多功能函數(shù),對(duì)于值函數(shù)參數(shù),求兩個(gè)數(shù)的 值;對(duì)于最小值函數(shù)參數(shù),求兩個(gè)數(shù)的最小值。
    程序如下:
    /*指向函數(shù)的指針變量作函數(shù)參數(shù)*/
    main()
    {int max(),min(),fun();
    int a,b;
    scanf(”%d,%d”,&a,&b);
    printf(”值=”);
    fun(a,b,max);
    printf(”最小值=”);
    fun(a,b,min);
    }
    max(x,y)/*值函數(shù)*/
    int X,Y;
     {if(x>y)return(x);
    else return(y);
    }
    min(x,y∥*最小值函數(shù)*/
    int X,Y;
    {if(x    else return(y);
    }
    {un(x,Y,p)/*多功能函數(shù)*/
    int X,Y;
    int(*p)();/*P參數(shù)為指向整型函數(shù)的指針變量*/
    {int result;
    result=(*p)(x,y);/*通過指針調(diào)用函數(shù)*/
    print{(”%d\n”,result)}
    }
    輸入數(shù)據(jù):28,32
    運(yùn)行結(jié)果:值一32最小值一28
    第一次調(diào)用fun()函數(shù)時(shí),除了將a、b的值傳遞給X、Y,還將函數(shù)max()的入口地址(max)傳遞給指向函數(shù)的指針變量P,這時(shí)函數(shù)fun()中的(*p)(x,y)相當(dāng)于max(x,y)。
    第二次調(diào)用fun()函數(shù)時(shí),a、b的值同樣傳遞給x、Y,另改用函數(shù)rain()的入口地址(min)傳遞給指向函數(shù)的指針變量P,這時(shí)函數(shù)fun()中的(*p)(x,y)相當(dāng)于min(x,y)。
    本例這樣做無太多實(shí)際意義,主要使讀者認(rèn)識(shí)指向函數(shù)的指針變量作函數(shù)參數(shù)的做法。請(qǐng)讀者進(jìn)一步參閱本章最后一節(jié)的通用積分程序。