国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
深入理解C語言函數(shù)指針
我們一開始只是從功能上或者說從數(shù)學(xué)意義上理解myFun這個函數(shù),知道m(xù)yFun函數(shù)名代表的是一個功能(或是說一段代碼)。函數(shù)名到底又是什么東西呢?
函數(shù)指針變量
     一個數(shù)據(jù)變量的內(nèi)存地址可以存儲在相應(yīng)的指針變量中,函數(shù)的首地址也以存儲在某個函數(shù)指針變量中。這樣,我就可以通過這個函數(shù)指針變量來調(diào)用所指向的函數(shù)了。
     在C系列語言中,任何一個變量,總是要先聲明,之后才能使用的。函數(shù)指針變量也應(yīng)該要先聲明。
     函數(shù)指針變量的聲明:
     void (*funP)(int) ;   //聲明一個指向同樣參數(shù)、返回值的函數(shù)指針變量。
    (整個函數(shù)指針變量的聲明格式如同函數(shù)myFun的聲明處一樣,只不過——我們把myFun改成(*funP)而已,這樣就有了一個能指向myFun函數(shù)的指針了。當(dāng)然,這個funP指針變量也可以指向所有其它具有相同參數(shù)及返回值的函數(shù)。)
示例2:
#include <stdio.h>#include <stdlib.h>void (*funP)(int);   //聲明也可寫成void(*funP)(int x),但習(xí)慣上一般不這樣。void (*funA)(int);void myFun(int x);    //聲明也可寫成:void myFun( int );int main(){    //一般的函數(shù)調(diào)用    myFun(100);    //myFun與funP的類型關(guān)系類似于int 與int *的關(guān)系。    funP=&myFun;  //將myFun函數(shù)的地址賦給funP變量    (*funP)(200);  //通過函數(shù)指針變量來調(diào)用函數(shù)    //myFun與funA的類型關(guān)系類似于int 與int 的關(guān)系。    funA=myFun;    funA(300);    //三個貌似錯亂的調(diào)用    funP(400);    (*funA)(600);    (*myFun)(1000);    return 0;}void myFun(int x){    printf("myFun: %d\n",x);}

輸出:

總結(jié):
1、 其實,myFun的函數(shù)名與funP、funA函數(shù)指針都是一樣的,即都是函數(shù)指針。myFun函數(shù)名是一個函數(shù)指針常量,而funP、funA是函數(shù)數(shù)指針變量,這是它們的關(guān)系。
2、但函數(shù)名調(diào)用如果都得如(*myFun)(10)這樣,那書寫與讀起來都是不方便和不習(xí)慣的。所以C語言的設(shè)計者們才會設(shè)計成又可允許myFun(10)這種形式地調(diào)用(這樣方便多了,并與數(shù)學(xué)中的函數(shù)形式一樣)。
3、 為了統(tǒng)一調(diào)用方式,funP函數(shù)指針變量也可以funP(10)的形式來調(diào)用。
4、賦值時,可以寫成funP=&myFun形式,也可以寫成funP=myFun。
5、但是在聲明時,void myFun(int )不能寫成void (*myFun)(int )。void (*funP)(int )不能寫成void funP(int )。
6、函數(shù)指針變量也可以存入一個數(shù)組內(nèi)。數(shù)組的聲明方法:int (*fArray[10]) ( int );
示例3
#include <stdio.h>#include <stdlib.h>void (*funP)(int);void (*funA)(int);void myFun(int x);int main(){    funP=&myFun;    //深入理解    printf("sizeof(myFun)=%d\n",sizeof(myFun));    printf("sizeof(funP)=%d\n",sizeof(funP));    printf("myFun\t 0x%p=0x%p\n",&myFun,myFun);    printf("funP\t 0x%p=0x%p\n",&funP,funP);    printf("funA\t 0x%p=0x%p\n",&funA,funA);    return 0;}void myFun(int x){    printf("myFun: %d\n",x);}

輸出:

總結(jié):
1、函數(shù)指針變量跟普通的指針一樣在32位系統(tǒng)下大小都為4。但是函數(shù)指針常量的大小為1.
2、函數(shù)指針變量和函數(shù)指針常量存儲在內(nèi)存的不同位置。
3、為負(fù)值的函數(shù)指針變量(全局)的值為0。
函數(shù)指針作為某個函數(shù)的參數(shù)
既然函數(shù)指針變量是一個變量,當(dāng)然也可以作為某個函數(shù)的參數(shù)來使用的。
示例:
#include <stdio.h>#include <stdlib.h>typedef void(*FunType)(int);//前加一個typedef關(guān)鍵字,這樣就定義一個名為FunType函數(shù)指針類型,而不是一個FunType變量。//形式同 typedef int* PINT;void myFun(int x);void hisFun(int x);void herFun(int x);void callFun(FunType fp,int x);int main(){    callFun(myFun,100);//傳入函數(shù)指針常量,作為回調(diào)函數(shù)    callFun(hisFun,200);    callFun(herFun,300);    return 0;}void callFun(FunType fp,int x){    fp(x);//通過fp的指針執(zhí)行傳遞進來的函數(shù),注意fp所指的函數(shù)有一個參數(shù)}void myFun(int x){    printf("myFun: %d\n",x);}void hisFun(int x){    printf("hisFun: %d\n",x);}void herFun(int x){    printf("herFun: %d\n",x);}

輸出:

參考http://blog.pfan.cn/whyhappy/6030.html
本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
【解惑】函數(shù)名與函數(shù)指針
委托和事件的綜合總結(jié)
C指針函數(shù)與函數(shù)指針
簡要說明C語言中指針函數(shù)與函數(shù)指針的區(qū)別
C語言
高級指針話題-函數(shù)指針
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服