首先,我們來看一個題
網(wǎng)站建設公司,為您提供網(wǎng)站建設,網(wǎng)站制作,網(wǎng)頁設計及定制網(wǎng)站建設服務,專注于成都定制網(wǎng)頁設計,高端網(wǎng)頁制作,對成都除甲醛等多個行業(yè)擁有豐富的網(wǎng)站建設經(jīng)驗的網(wǎng)站建設公司。專業(yè)網(wǎng)站設計,網(wǎng)站優(yōu)化推廣哪家好,專業(yè)seo優(yōu)化排名優(yōu)化,H5建站,響應式網(wǎng)站。typedef struct list_t{ struct list_t *next; struct list_t *prev; char data[0]; }list_t;
此時,你知道32位系統(tǒng)中,sizeof(list_t)的值為多少么?
這時,你會告訴我char data[0]在C和C++中是不被允許的,因為看起來毫無意義。然而,此處為何可以呢?
在講述柔性數(shù)組成員之前,首先要介紹一下不完整類型(incomplete type)。不完整類型是這樣一種類型,它缺乏足夠的信息例如長度去描述一個完整的對象,它的出現(xiàn)反映了C程序員對精煉代碼的極致追求,這種代碼結(jié)構產(chǎn)生于對動態(tài)結(jié)構體的需求。
鑒于這種代碼結(jié)構所產(chǎn)生的重要作用,C99甚至把它收入了標準中。C99使用不完整類型實現(xiàn)柔性數(shù)組成員,在C99 中,結(jié)構中的最后一個元素允許是未知大小的數(shù)組,這就叫做柔性數(shù)組(flexible array)成員(也叫伸縮性數(shù)組成員),但結(jié)構中的柔性數(shù)組成員前面必須至少一個其他成員。柔性數(shù)組成員允許結(jié)構中包含一個大小可變的數(shù)組。柔性數(shù)組成員只作為一個符號地址存在,而且必須是結(jié)構體的最后一個成員,sizeof 返回的這種結(jié)構大小不包括柔性數(shù)組的內(nèi)存。柔性數(shù)組成員不僅可以用于字符數(shù)組,還可以是元素為其它類型的數(shù)組。包含柔性數(shù)組成員的結(jié)構用malloc()函數(shù)進行內(nèi)存的動態(tài)分配,并且分配的內(nèi)存應該大于結(jié)構的大小,以適應柔性數(shù)組的預期大小。
并且柔性數(shù)組不占內(nèi)存和內(nèi)存對齊。而且使用柔性數(shù)組可以大大簡化內(nèi)容的管理,只需要一次申請,然后通過數(shù)組的指針偏移就可以直接獲得相應的數(shù)據(jù)緩沖區(qū),非常簡單,釋放的時候也僅僅只需要一次釋放。
另外有需要云服務器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。