struct中char data[0]的用法
最近在學(xué)習(xí)老師的網(wǎng)絡(luò)代碼時(shí),看到定義了一個(gè)如下的結(jié)構(gòu)體:






在結(jié)構(gòu)中,data是一個(gè)數(shù)組名;但該數(shù)組沒(méi)有元素;該數(shù)組的真實(shí)地址緊隨結(jié)構(gòu)體MyData之后,而這個(gè)地址就是結(jié)構(gòu)體后面數(shù)據(jù)的地址(如果給這個(gè)結(jié)構(gòu)體分配的內(nèi)容大于這個(gè)結(jié)構(gòu)體實(shí)際大小,后面多余的部分就是這個(gè)data的內(nèi)容);這種聲明方法可以巧妙的實(shí)現(xiàn)C語(yǔ)言里的數(shù)組擴(kuò)展。
實(shí)際用時(shí)采取這樣:
struct MyData *p = (struct MyData *)malloc(sizeof(struct MyData )+strlen(str))
這樣就可以通過(guò)p->data 來(lái)操作這個(gè)str。
示例:






























輸出:


malloc申請(qǐng)的是14個(gè)字節(jié)的連續(xù)空間,它返回一個(gè)指針指向這14個(gè)字節(jié),強(qiáng)制轉(zhuǎn)換成struct INFO的時(shí)候,前面4個(gè)字節(jié)被認(rèn)為是Mydata結(jié)構(gòu),后面的部分拷貝了“123456789”的內(nèi)容。
posted on 2011-04-04 12:31 tiger7 閱讀(2966) 評(píng)論(0) 編輯 收藏 引用 所屬分類: C++