零長(zhǎng)度數(shù)組與柔性數(shù)組

零長(zhǎng)度數(shù)組(Zero-length array)與柔性數(shù)組(Flexible array)

GNU C允許使用零長(zhǎng)度數(shù)組,它們非常有用。如下是一個(gè)零長(zhǎng)度數(shù)組的應(yīng)用,零長(zhǎng)數(shù)組在有固定頭部的可變對(duì)象上非常有用。

struct line{     
    int len;     
    char contents[0]
};

零長(zhǎng)數(shù)組使用的優(yōu)缺點(diǎn):

優(yōu)點(diǎn)

  • 不需要使用指針來(lái)分配內(nèi)存,節(jié)約一個(gè)指針變量所占內(nèi)存大小,也使內(nèi)存申請(qǐng)方式更加便捷;
  • 分配的內(nèi)存連續(xù),管理與釋放簡(jiǎn)單,只需要一次操作。

缺點(diǎn)

  • 零長(zhǎng)數(shù)組是GNU C的實(shí)現(xiàn),非標(biāo)準(zhǔn),因此并不是所有的編譯器都支持,有移植風(fēng)險(xiǎn)。

而在最新的ISO C99實(shí)現(xiàn)中,我們可以使用柔性數(shù)組,與零長(zhǎng)數(shù)組相比,在語(yǔ)法和語(yǔ)義上有些許差異:

  • 柔性數(shù)組寫(xiě)成contents[],沒(méi)有0。
  • 柔性數(shù)組屬于不完整類(lèi)型,可能sizeof操作符不能運(yùn)用在它上面。作為零長(zhǎng)數(shù)組原始實(shí)現(xiàn)的變體,sizeof計(jì)算結(jié)果為0。
  • 柔性數(shù)組作為成員只能出現(xiàn)在struct的最后。
  • 一個(gè)包含柔性數(shù)組成員的結(jié)構(gòu)體或包含這樣結(jié)構(gòu)體的聯(lián)合體,不能成為一個(gè)結(jié)構(gòu)體的成員或數(shù)組的元素。

比較零長(zhǎng)數(shù)組和柔性數(shù)組,他們的功能性是一致的:方便的應(yīng)用在有固定頭部的可變對(duì)象上。這種特性非常適用于網(wǎng)絡(luò)數(shù)據(jù)傳輸?shù)膱?chǎng)合。需要注意的是,他們分別一個(gè)是非標(biāo)準(zhǔn)一個(gè)是標(biāo)準(zhǔn),零長(zhǎng)數(shù)組是由GNU提出并實(shí)現(xiàn)的,這也反應(yīng)了當(dāng)時(shí)C編程者對(duì)于這種特性的需求??梢韵胂?,ISO C99吸收了這個(gè)特性并加以改變而產(chǎn)生了柔性數(shù)組。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容