原文:http://www.xuebuyuan.com/1731866.html
摘要:在實際的編程中,我們經(jīng)常需要使用變長數(shù)組,但是C語言并不支持變長的數(shù)組。此時,我們可以使用結(jié)構(gòu)體的方法實現(xiàn)C語言變長數(shù)組。
struct MyData { int nLen; char data[0];}; PS:必須將指針定義在struct的末尾,指針的類型也可以不為char。在結(jié)構(gòu)中,data是一個數(shù)組名;但該數(shù)組沒有元素;該數(shù)組的真實地址緊隨結(jié)構(gòu)體MyData之后,而這個地址就是結(jié)構(gòu)體后面數(shù)據(jù)的地址(如果給這個結(jié)構(gòu)體分配的內(nèi)容大于這個結(jié)構(gòu)體實際大小,后面多余的部分就是這個data的內(nèi)容);這種聲明方法可以巧妙的實現(xiàn)C語言里的數(shù)組擴(kuò)展。實際用時采取這樣:struct MyData *p = (struct MyData *)malloc(sizeof(struct MyData )+strlen(str))這樣就可以通過p->data 來操作這個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;}
新聞熱點
疑難解答