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

C++語言程序設(shè)計(jì)時(shí)如何控制語句?

Visual Basic教程之順序,選擇,循環(huán)結(jié)構(gòu)的程序設(shè)計(jì)資料免費(fèi)下載

C語言程序設(shè)計(jì)實(shí)用教程之如何選擇結(jié)構(gòu)程序設(shè)計(jì)

C語言程序設(shè)計(jì)教程之分支結(jié)構(gòu)程序設(shè)計(jì)的課件免費(fèi)下載

C語言程序設(shè)計(jì)教程之選擇結(jié)構(gòu)程序設(shè)計(jì)的資料說明

C++程序設(shè)計(jì)教程之程序設(shè)計(jì)初步資料說明

C語言的switch case多分支選擇語句的詳細(xì)資料說明

C語言程序設(shè)計(jì)第四講結(jié)構(gòu)化程序設(shè)計(jì)之選擇
C程序設(shè)計(jì)基礎(chǔ)-分支結(jié)構(gòu)

評(píng)論