原文:http://www.xuebuyuan.com/1731866.html
摘要:在實(shí)際的編程中,我們經(jīng)常需要使用變長(zhǎng)數(shù)組,但是C語(yǔ)言并不支持變長(zhǎng)的數(shù)組。此時(shí),我們可以使用結(jié)構(gòu)體的方法實(shí)現(xiàn)C語(yǔ)言變長(zhǎng)數(shù)組。
struct MyData { int nLen; char data[0];}; PS:必須將指針定義在struct的末尾,指針的類(lèi)型也可以不為char。在結(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。程序?qū)嵗?/p>
struct MyData { int nLen; char data[0];};int main(){ int nLen = 10; char str[10] = "123456789"; cout << "Size of MyData: " <<sizeof(MyData) << endl; MyData *myData = (MyData*)malloc(sizeof(MyData) +10); memcpy(myData->data, str, 10); cout << "myData's Data is: " << myData->data << endl; free(myData); return 0;}
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注