下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
第C語言詳解函數(shù)與指針的使用目錄一、函數(shù)類型二、函數(shù)指針三、回調(diào)函數(shù)四、小結(jié)
一、函數(shù)類型
C語言中的函數(shù)有自己特定的類型
函數(shù)的類型由返回值,參數(shù)類型和參數(shù)個數(shù)共同決定,如intadd(inti,intj)的類型為int(int,int)
C語言中通過typedef為函數(shù)類型重命名
typedeftypename(parameterlist)
如
typedefintf(int,int);
typedefvoidp(int);
二、函數(shù)指針
函數(shù)指針用于指向一個函數(shù)
函數(shù)名是執(zhí)行函數(shù)體的入口地址
可通過函數(shù)類型定義函數(shù)指針:FuncType*pointer;
也可以直接定義:type(*pointer)(parameterlist);
pointer為函數(shù)指針變量名type為所指函數(shù)的返回值類型parameterlist為所指函數(shù)的參數(shù)類型列表
下面看一個函數(shù)指針使用的代碼:
#includestdio.h
typedefint(FUNC)(int);
inttest(inti)
returni*i;
voidf()
printf("Callf()...\n");
intmain()
FUNC*pt=test;
void(*pf)()=
printf("pf=%p\n",pf);
printf("f=%p\n",f);
printf("f=%p\n",
pf();
(*pf)();
printf("Functionpointercall:%d\n",pt(2));
return0;
輸出結(jié)果如下:
注意:
1.FUNC*pt=test;是合法的,test這個函數(shù)名代表的是函數(shù)的入口地址,
2.對于函數(shù)名來說,取不取地址沒有區(qū)別,例如上面代碼中的FUNC*pt=test;也可以寫成FUNC*pt=test;
3.(*pf)();相當(dāng)于f();
如果我們把void(*pf)()=改成void(*pf)()=0x8048400;直接利用函數(shù)指針跳轉(zhuǎn)到0x8048400這個地址來執(zhí)行,結(jié)果照樣也能正常輸出:
面試小問題:如何使用C語言直接跳轉(zhuǎn)到某個固定的地址開始執(zhí)行
答案:通過函數(shù)指針
三、回調(diào)函數(shù)
回調(diào)函數(shù)是利用函數(shù)指針實現(xiàn)的一種調(diào)用機制
回調(diào)機制原理
調(diào)用者不知道具體事件發(fā)生時需要調(diào)用的具體函數(shù)被調(diào)函數(shù)不知道何時被調(diào)用,只知道需要完成的任務(wù)當(dāng)具體事件發(fā)生時,調(diào)用者通過函數(shù)指針調(diào)用具體函數(shù)
回調(diào)機制中的調(diào)用者和被調(diào)函數(shù)互不依賴
下面看一個回調(diào)函數(shù)的使用示例:
#includestdio.h
typedefint(*Weapon)(int);
voidfight(Weaponwp,intarg)
intresult=0;
printf("Fightboss!\n");
result=wp(arg);
printf("Bossloss:%d\n",result);
intknife(intn)
intret=0;
inti=0;
for(i=0;ii++)
printf("Knifeattack:%d\n",1);
ret++;
returnret;
intsword(intn)
intret=0;
inti=0;
for(i=0;ii++)
printf("Swordattack:%d\n",5);
ret+=5;
returnret;
intgun(intn)
intret=0;
inti=0;
for(i=0;ii++)
printf("Gunattack:%d\n",10);
ret+=10;
returnret;
intmain()
fight(knife,3);
fight(sword,4);
fight(gun,5);
return0;
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 罕見腫瘤的個體化治療綜合治療模式構(gòu)建與個體化方案-2
- 2026江西贛州有色冶金研究所有限公司招聘11人備考題庫及一套參考答案詳解
- 餐廳股東之間財務(wù)制度
- 2026四川雅安市漢源縣審計局招聘編外專業(yè)技術(shù)人員2人備考題庫含答案詳解
- 五種財務(wù)制度
- 衛(wèi)健財務(wù)制度
- 釀酒企業(yè)財務(wù)制度
- 藥業(yè)財務(wù)制度及報銷流程
- 云南東北商會財務(wù)制度
- 單店合伙財務(wù)制度
- 糧食行業(yè)競爭對手分析報告
- 北京通州產(chǎn)業(yè)服務(wù)有限公司招聘參考題庫必考題
- 兒科MDT臨床技能情景模擬培訓(xùn)體系
- 【高三上】2026屆12月八省聯(lián)考(T8聯(lián)考)語文試題含答案
- (人教版)必修第一冊高一物理上學(xué)期期末復(fù)習(xí)訓(xùn)練 專題02 連接體、傳送帶、板塊問題(原卷版)
- 護理不良事件根本原因分析
- 社會心理學(xué)考試題及答案
- 醫(yī)療器械經(jīng)營企業(yè)質(zhì)量管理體系文件(2025版)(全套)
- 出鐵廠鐵溝澆注施工方案
- 2025年中小學(xué)教師正高級職稱評聘答辯試題(附答案)
- 現(xiàn)代企業(yè)管理體系架構(gòu)及運作模式
評論
0/150
提交評論