嵌入式C語(yǔ)言二級(jí)指針在鏈表中的應(yīng)用
重讀了兩本書:Stephen A.Maguire的《編程精粹:Microsoft編寫優(yōu)質(zhì)無(wú)錯(cuò)C程序秘訣》和David R. Hanson的《C語(yǔ)言接口與實(shí)現(xiàn):創(chuàng)建可重用軟件的技術(shù)》。兩本書都有對(duì)鏈表的操作。
假設(shè)有如圖所示的鏈表,鏈表節(jié)點(diǎn)的pb成員指向一個(gè)緩沖塊,刪除節(jié)點(diǎn)函數(shù)根據(jù)緩沖塊的首地址,找到節(jié)點(diǎn)并刪除節(jié)點(diǎn):

《編程精粹》使用一個(gè)變量pbiPrev來(lái)保存前一個(gè)節(jié)點(diǎn)位置,并且要處理刪除的是第一個(gè)節(jié)點(diǎn)A這種邊界條件:
void FreeBlockInfo(byte *pbToFree)
{
blockinfo *pbi, *pbiPrev;
pbiPrev = NULL;
for(pbi = pbiHead; pbi != NULL; pbi = pbi->pbiNext)
{
if(fPtrEqual(pbi->pb, pbToFree)
{
if(pbiPrev == NULL)
pbiHead = pbi->pbiHead;
else
pbiPrev->pbiNext = pbi->pbiNext;
break;
}
pbiPrev = pbi;
}
/*如果pbi是NULL, 說(shuō)明參數(shù)pbToFree非法*/
ASSERT(pbi != NULL);
/*在釋放前破壞掉要釋放內(nèi)存中的內(nèi)容*/
memset(pbi, bGarbage, sizeof(blockinfo));
free(pbi);
}
《C語(yǔ)言接口與實(shí)現(xiàn)》使用了二級(jí)指針,可以很巧妙的省掉變量pbiPrev以及邊界判斷:
void FreeBlockInfo(byte *pbToFree)
{
blockinfo **ppbi, *pbiFind;
pbiFind = NULL;
for(ppbi = &pbiHead; *ppbi != NULL; ppbi = &(*ppbi)->pbiNext)
{
if(fPtrEqual((*ppbi)->pb, pbToFree)
{
pbiFind = *ppbi;
*ppbi = (*ppbi)->pbiNext;
break;
}
}
/*如果pbiFind是NULL, 說(shuō)明參數(shù)pbToFree非法*/
ASSERT(pbiFind != NULL);
/*在釋放前破壞掉要釋放內(nèi)存中的內(nèi)容*/
memset(pbiFind, bGarbage, sizeof(blockinfo));
free(pbiFind);
}
以上就是嵌入式C語(yǔ)言二級(jí)指針在鏈表中的應(yīng)用的詳細(xì)內(nèi)容,更多關(guān)于嵌入式C語(yǔ)言二級(jí)指針鏈表的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
詳解C語(yǔ)言如何執(zhí)行HTTP GET請(qǐng)求
在現(xiàn)代互聯(lián)網(wǎng)時(shí)代,網(wǎng)絡(luò)數(shù)據(jù)的獲取和分析變得越來(lái)越重要,本文我們將使用C語(yǔ)言和libcurl庫(kù)來(lái)編寫一個(gè)簡(jiǎn)單的網(wǎng)絡(luò)爬蟲,以執(zhí)行HTTP GET請(qǐng)求并獲取淘寶網(wǎng)頁(yè)的內(nèi)容,感興趣的可以了解下2023-11-11
C語(yǔ)言學(xué)習(xí)之函數(shù)知識(shí)總結(jié)
函數(shù)是一組一起執(zhí)行一個(gè)任務(wù)的語(yǔ)句。每個(gè)?C?程序都至少有一個(gè)函數(shù),即主函數(shù)?main()?,所有簡(jiǎn)單的程序都可以定義其他額外的函數(shù)。本文就為大家詳細(xì)講講C語(yǔ)言中函數(shù)的相關(guān)知識(shí)點(diǎn),希望有所幫助2022-07-07
opencv3/C++圖像濾波實(shí)現(xiàn)方式
今天小編就為大家分享一篇opencv3/C++圖像濾波實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-12-12
C語(yǔ)言詳細(xì)分析浮點(diǎn)數(shù)在內(nèi)存中的儲(chǔ)存
我們?cè)谌粘I钪泻途幊讨卸紩?huì)用到小數(shù),比如:3.1415926、29.9、1E10(科學(xué)計(jì)數(shù)法也是浮點(diǎn)型)。在C語(yǔ)言中的浮點(diǎn)型類型有:float,double,long double。那么浮點(diǎn)數(shù)在這些浮點(diǎn)型的內(nèi)存之中又是如何儲(chǔ)存的呢,這就是今天我們要分享的2022-06-06
OpenCV4.1.0+VisualStudio2019開發(fā)環(huán)境搭建(超級(jí)簡(jiǎn)單)
這篇文章主要介紹了OpenCV4.1.0+VisualStudio2019開發(fā)環(huán)境搭建(超級(jí)簡(jiǎn)單),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03
C語(yǔ)言斷言函數(shù)assert()的學(xué)習(xí)筆記
在C語(yǔ)言庫(kù)函數(shù)中提供了一個(gè)輔助調(diào)試程序的小型庫(kù),它是由assert()宏組成,本文就詳細(xì)的介紹了一下如何使用,感興趣的可以了解一下2021-11-11
C語(yǔ)言跳轉(zhuǎn)瀏覽器打開指定URL的操作代碼
這篇文章主要介紹了C語(yǔ)言跳轉(zhuǎn)瀏覽器打開指定URL,該代碼使用sprintf()函數(shù)將要打開的URL添加到一個(gè)系統(tǒng)命令中,然后使用system()函數(shù)調(diào)用該命令以默認(rèn)瀏覽器打開URL,需要的朋友可以參考下2023-04-04
C語(yǔ)言單鏈表實(shí)現(xiàn)學(xué)生管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言單鏈表實(shí)現(xiàn)學(xué)生管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-12-12
C語(yǔ)言手把手教你實(shí)現(xiàn)貪吃蛇AI(上)
這篇文章主要介紹了C語(yǔ)言手把手教你實(shí)現(xiàn)貪吃蛇AI,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-01-01

