周立功教授數(shù)年之心血之作《程序設(shè)計與數(shù)據(jù)結(jié)構(gòu)》以及《面向AMetal框架與接口的編程(上)》。書本內(nèi)容公開后,在電子行業(yè)掀起一片學(xué)習(xí)熱潮。經(jīng)周立功教授授權(quán),本公眾號特對《程序設(shè)計與數(shù)據(jù)結(jié)構(gòu)》一書內(nèi)容進(jìn)行連載,愿共勉之。
第二章為程序設(shè)計技術(shù),本文為2.2.5 結(jié)構(gòu)體數(shù)組。
>>>2.2.5 結(jié)構(gòu)體數(shù)組
下面將以控制臺菜單選項為例,介紹多分支選擇結(jié)構(gòu)程序設(shè)計的思想與實現(xiàn)方法。一般來說,菜單欄至少包括新建文件、打開文件、保存文件和退出4項基本功能。比如:
如果使用函數(shù)指針,這4個函數(shù)的調(diào)用形式如下:
而新建文件、打開文件、保存文件和退出都可以作為字符串"新建文件"、"打開文件"、"保存文件"和"退出"存儲在char數(shù)組中。比如:
基于此,可以先聲明一個結(jié)構(gòu)體類型CmdEntry,其聲明如下:
接著定義一個結(jié)構(gòu)體數(shù)組作為函數(shù)表,分別用于存儲菜單函數(shù)的入口地址和菜單信息。其聲明如下:
在這里,將cmdArray聲明為一個內(nèi)含10個元素的數(shù)組,數(shù)組的每個元素都是一個CmdEntry類型的數(shù)組,因此cmdArray[0]是第一個CmdEntry類型的結(jié)構(gòu)體變量,cmdArray[1]是第2個CmdEntry類型的結(jié)構(gòu)體變量,以此類推。cmyArray是數(shù)組名,該數(shù)組中的每個元素都是CmdEntry類型的結(jié)構(gòu)體變量。
為了標(biāo)識結(jié)構(gòu)體數(shù)組中的成員,可以采用訪問單獨結(jié)構(gòu)體的規(guī)則:在結(jié)構(gòu)體名后面加一個點運算符,再在點運算符后面加上成員名。比如:
注意,數(shù)組下標(biāo)緊跟在cmyArray后面,不是成員名后面。比如:
使用cmdArray[2].cHelp的原因是:cmdArray[2]是結(jié)構(gòu)體變量名,正如cmdArray[1]是一個結(jié)構(gòu)體變量名。使用cmdArray[3].cHelp的原因是cmdArray[3]是結(jié)構(gòu)體變量名,如同cmdArray[0]是另一個變量名。由于數(shù)組變量名代表數(shù)組首元素的地址,因此下面兩個語句是等價的:
那么*pCmdEntry=cmdArray[0],因為&和*是一對逆運算符,所以可以做以下替換:
由于.運算符比*運算符的優(yōu)先級高,因此必須使用圓括號。順帶提一下,下面的表達(dá)式代表什么?
這是cmdArray數(shù)組第1個結(jié)構(gòu)體變量(cmdArray[0]部分)中的第2個字符(cHelp[1]部分),這個字符為“建”。這個示例指出,點運算符右側(cè)的下標(biāo)作用于各個成員,點運算符左側(cè)的下標(biāo)作用于結(jié)構(gòu)體數(shù)組。最后總結(jié)一下:
根據(jù)上面的定義,即可用以下方式獲得相應(yīng)函數(shù)的入口地址。比如:
即pfuncmd函數(shù)指針指向CreateFile()函數(shù),其調(diào)用形式如下:
由此可見,采用回調(diào)函數(shù)動態(tài)綁定的方式,程序的可擴展性得到了很大的提升。只需在“<標(biāo)注>1”處添加自定義的函數(shù),無需多處修改代碼,不僅可以很好地解決程序的可擴展性問題,而且還大大地降低程序的出錯幾率,詳見程序清單2.26。
程序清單2.26 控制臺菜單選項程序
請用bubbleSort()算法完成這個練習(xí),將employeeArray結(jié)構(gòu)體數(shù)組分別按下列要求排序并輸出:(1)按id從小到大排序;(2)按weight、age、height從小到大排序,相同時按id從小到大排序;(3)bloodType按A、B、O、AB順序排序,相同時按id從小到大排序。
-
結(jié)構(gòu)體數(shù)據(jù)
+關(guān)注
關(guān)注
0文章
3瀏覽量
5952
原文標(biāo)題:周立功:結(jié)構(gòu)體數(shù)組的應(yīng)用
文章出處:【微信號:ZLG_zhiyuan,微信公眾號:ZLG致遠(yuǎn)電子】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論