C語言變長數(shù)組 struct中char data[0]的用法詳解
今天在看一段代碼時出現(xiàn)了用結(jié)構(gòu)體實現(xiàn)變長數(shù)組的寫法,一開始因為忘記了這種技術(shù),所以老覺得作者的源碼有誤,最后經(jīng)過我深思之后,終于想起以前看過的用struct實現(xiàn)變長數(shù)組的技術(shù)。下面是我在網(wǎng)上找到的一篇講解很清楚的文章。
在實際的編程中,我們經(jīng)常需要使用變長數(shù)組,但是C語言并不支持變長的數(shù)組。此時,我們可以使用結(jié)構(gòu)體的方法實現(xiàn)C語言變長數(shù)組。
struct MyData { int nLen; char data[0];};
在結(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ù)組擴展。
實際用時采取這樣:
struct MyData *p = (struct MyData *)malloc(sizeof(struct MyData )+strlen(str))
這樣就可以通過p->data 來操作這個str。
程序?qū)嵗?br />
#include <iostream> using namespace std; 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; }
輸出:
Size of MyData: 4
myData"s Data is: 123456789
PS:必須將指針定義在struct的末尾,指針的類型也可以不為char。
以上這篇C語言變長數(shù)組 struct中char data[0]的用法詳解就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持我們。
上一篇:關(guān)于c++ 智能指針及 循環(huán)引用的問題
欄 目:C語言
下一篇:C語言中十六進(jìn)制轉(zhuǎn)十進(jìn)制兩種實現(xiàn)方法
本文標(biāo)題:C語言變長數(shù)組 struct中char data[0]的用法詳解
本文地址:http://mengdiqiu.com.cn/a1/Cyuyan/1847.html
您可能感興趣的文章
- 04-02c語言函數(shù)調(diào)用后清空內(nèi)存 c語言調(diào)用函數(shù)刪除字符
- 04-02c語言的正則匹配函數(shù) c語言正則表達(dá)式函數(shù)庫
- 04-02func函數(shù)+在C語言 func函數(shù)在c語言中
- 04-02c語言中對數(shù)函數(shù)的表達(dá)式 c語言中對數(shù)怎么表達(dá)
- 04-02c語言用函數(shù)寫分段 用c語言表示分段函數(shù)
- 04-02c語言編寫函數(shù)冒泡排序 c語言冒泡排序法函數(shù)
- 04-02c語言沒有round函數(shù) round c語言
- 04-02c語言分段函數(shù)怎么求 用c語言求分段函數(shù)
- 04-02C語言中怎么打出三角函數(shù) c語言中怎么打出三角函數(shù)的值
- 04-02c語言調(diào)用函數(shù)求fibo C語言調(diào)用函數(shù)求階乘


閱讀排行
本欄相關(guān)
- 04-02c語言函數(shù)調(diào)用后清空內(nèi)存 c語言調(diào)用
- 04-02func函數(shù)+在C語言 func函數(shù)在c語言中
- 04-02c語言的正則匹配函數(shù) c語言正則表達(dá)
- 04-02c語言用函數(shù)寫分段 用c語言表示分段
- 04-02c語言中對數(shù)函數(shù)的表達(dá)式 c語言中對
- 04-02c語言編寫函數(shù)冒泡排序 c語言冒泡排
- 04-02c語言沒有round函數(shù) round c語言
- 04-02c語言分段函數(shù)怎么求 用c語言求分段
- 04-02C語言中怎么打出三角函數(shù) c語言中怎
- 04-02c語言調(diào)用函數(shù)求fibo C語言調(diào)用函數(shù)求
隨機閱讀
- 01-11ajax實現(xiàn)頁面的局部加載
- 01-11Mac OSX 打開原生自帶讀寫NTFS功能(圖文
- 08-05dedecms(織夢)副欄目數(shù)量限制代碼修改
- 01-10使用C語言求解撲克牌的順子及n個骰子
- 08-05DEDE織夢data目錄下的sessions文件夾有什
- 01-10delphi制作wav文件的方法
- 01-10C#中split用法實例總結(jié)
- 01-10SublimeText編譯C開發(fā)環(huán)境設(shè)置
- 08-05織夢dedecms什么時候用欄目交叉功能?
- 04-02jquery與jsp,用jquery