C語言結(jié)構(gòu)體中怎么實現(xiàn)函數(shù)成員以及回調(diào)函數(shù)

這篇文章主要講解了“C語言結(jié)構(gòu)體中怎么實現(xiàn)函數(shù)成員以及回調(diào)函數(shù)”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“C語言結(jié)構(gòu)體中怎么實現(xiàn)函數(shù)成員以及回調(diào)函數(shù)”吧!

超過10年行業(yè)經(jīng)驗,技術(shù)領(lǐng)先,服務(wù)至上的經(jīng)營模式,全靠網(wǎng)絡(luò)和口碑獲得客戶,為自己降低成本,也就是為客戶降低成本。到目前業(yè)務(wù)范圍包括了:成都網(wǎng)站設(shè)計、網(wǎng)站制作、外貿(mào)營銷網(wǎng)站建設(shè),成都網(wǎng)站推廣,成都網(wǎng)站優(yōu)化,整體網(wǎng)絡(luò)托管,微信小程序開發(fā),微信開發(fā),app軟件開發(fā),同時也可以讓客戶的網(wǎng)站和網(wǎng)絡(luò)營銷和我們一樣獲得訂單和生意!

往往我們在寫程序時,比如定義了某一個“對象”(注意這里不是指C++,C#,Java等高級語言中的對象概念)。如在C語言中定義了一個用作顯示器初始化的對象,這里定義了一個內(nèi)部成員變量int width,這個變量表示了當(dāng)前系統(tǒng)中顯示器的寬度,另一個變量為int height,這個變量表示了當(dāng)前系統(tǒng)中顯示器的高度。除了這兩個常規(guī)的變量之外,我們在對顯示器初始化時,會調(diào)用到函數(shù)“ScreenInit(intwidth, int height);”。

對于上述的應(yīng)用中,如果是簡單的單一顯示器是完全沒有任何問題的,但是當(dāng)我們這個程序需要去被外界移植的時候,每個顯示器除了有不同的width和height之外,其初始化函數(shù)也可能不同。對于這種應(yīng)用,我們希望這個初始化函數(shù)也被包含在整個“對象”中,這樣在移植的時候,我們除了定義顯示器的長度,寬度之外,再重新寫一個顯示器的初始化函數(shù),即可以非常方便地將這個顯示器驅(qū)動移植過去。

除了上述這個應(yīng)用之外,再比如,我們在寫一個嵌入式芯片的框架程序時候,可以將每一個新建的任務(wù)定義成一個結(jié)構(gòu)體,這個結(jié)構(gòu)體里面包含了這個任務(wù)的調(diào)度時間,優(yōu)先級,堆棧大小,以及具體的任務(wù)代碼。

上述的兩種應(yīng)用中,除了我們定義結(jié)構(gòu)體的普通成員變量之外,還需要在結(jié)構(gòu)體里面定義一個非常重要的元素,即函數(shù)。而我們前面已經(jīng)明確交代過C語言的結(jié)構(gòu)體中是不能支持函數(shù)的,那么我們能否想一個辦法出來讓C語言的結(jié)構(gòu)體可以去嵌入一個函數(shù)功能的成員進去呢?答案顯然是可以的,因為C語言的結(jié)構(gòu)體內(nèi)部雖然無法去直接定義一個函數(shù),但是C語言結(jié)構(gòu)體內(nèi)部的成員明確可以為一個指針,我們前面說了,C語言的指針可以指向一切具有地址的東西。

因此,要在C語言結(jié)構(gòu)體中實現(xiàn)函數(shù)成員的思路就變得很明了了,即:

在C語言結(jié)構(gòu)體內(nèi)部定義一個指向函數(shù)的指針;

在具體“對象”初始化的時候,將結(jié)構(gòu)體中的指向函數(shù)的指針指向具體實現(xiàn)功能的函數(shù);

在這個函數(shù)需要調(diào)用時進行調(diào)用。

以上就是關(guān)于C語言結(jié)構(gòu)體中實現(xiàn)函數(shù)成員的方法,如圖1所示。

 C語言結(jié)構(gòu)體中怎么實現(xiàn)函數(shù)成員以及回調(diào)函數(shù)

圖1 C語言結(jié)構(gòu)體中實現(xiàn)函數(shù)

再補充一點,上述這種原理,先將指向函數(shù)的指針指向具體的實現(xiàn)函數(shù),后面再來統(tǒng)一調(diào)用,這種方式就是我們在C語言里面常說的回調(diào)函數(shù)。回調(diào)函數(shù)的應(yīng)用有很多,比如當(dāng)我們在做單片機中斷的時候,就可以將單片機中斷處理函數(shù)寫成一個指向函數(shù)的指針,在每次單片機程序初始化的時候,將中斷里面的函數(shù)指針指向具體的中斷處理函數(shù),等到中斷產(chǎn)生的時候,單片機就可以去調(diào)用這個指向函數(shù)的指針了。而在程序運行的時候,我們也可以隨時去修改這個指向函數(shù)的指針指向的對象,使程序更加靈活。

接下來,我們來寫一些代碼說明一下C語言結(jié)構(gòu)體中實現(xiàn)函數(shù)成員。這里有一個實例,寫一個程序,根據(jù)輸入計算一個長方形的周長或者面積,假設(shè)鍵盤輸入的數(shù)字為1,就計算這個長方形的周長,假設(shè)鍵盤輸入的數(shù)字為0,就計算這個長方形的面積。

上述的這個程序可以有無數(shù)種做法,由于今天我們主要講述結(jié)構(gòu)體和回調(diào)函數(shù),那么我們就使用這兩個知識點來編寫程序。

首先要做的就是為這個長方形定義一個可以存儲它所有相關(guān)變量的結(jié)構(gòu)體,我們想一下,這個結(jié)構(gòu)體用來描述長方形,長方形的兩個最關(guān)鍵的信息就是它的長度和寬度,因此這個結(jié)構(gòu)體中一定要包含這兩個信息。然后,我們的要求是要計算這個長方形的周長和面積,所以我們也可以將這兩個變量一并定義在結(jié)構(gòu)體里面,當(dāng)然如果不想定義進結(jié)構(gòu)體也沒問題。接著我們要求是需要同時求這個長方形的面積和周長,因此我們可以為這個結(jié)構(gòu)體定義一個指向函數(shù)的指針,根據(jù)不同的選項來修改這個指針指向的函數(shù)。最后,根據(jù)輸入需要,修改這個結(jié)構(gòu)體中指向函數(shù)的指針指向的函數(shù),然后調(diào)用即可。因此可以寫出如圖2的程序。

C語言結(jié)構(gòu)體中怎么實現(xiàn)函數(shù)成員以及回調(diào)函數(shù)

圖2 結(jié)構(gòu)體內(nèi)嵌函數(shù)成員的應(yīng)用

感謝各位的閱讀,以上就是“C語言結(jié)構(gòu)體中怎么實現(xiàn)函數(shù)成員以及回調(diào)函數(shù)”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對C語言結(jié)構(gòu)體中怎么實現(xiàn)函數(shù)成員以及回調(diào)函數(shù)這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識點的文章,歡迎關(guān)注!

分享名稱:C語言結(jié)構(gòu)體中怎么實現(xiàn)函數(shù)成員以及回調(diào)函數(shù)
瀏覽路徑:http://bm7419.com/article46/gejhhg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供面包屑導(dǎo)航、用戶體驗、App設(shè)計、云服務(wù)器企業(yè)網(wǎng)站制作、網(wǎng)站制作

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站網(wǎng)頁設(shè)計