国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

[轉(zhuǎn)]C語言變長數(shù)組 struct中char data[0]的用法

2019-11-10 18:59:29
字體:
供稿:網(wǎng)友

原文: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;}


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 堆龙德庆县| 克山县| 门源| 黄骅市| 威远县| 雷州市| 白山市| 洱源县| 宁远县| 武穴市| 南投县| 三明市| 朝阳区| 阿尔山市| 会昌县| 南靖县| 玉环县| 普定县| 大余县| 叙永县| 安阳市| 昌江| 聂拉木县| 寻乌县| 龙海市| 东阿县| 江永县| 泗水县| 城口县| 柳州市| 万源市| 缙云县| 故城县| 中超| 都兰县| 清徐县| 石景山区| 民权县| 阳西县| 天水市| 手机|