国产探花免费观看_亚洲丰满少妇自慰呻吟_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ā)表
主站蜘蛛池模板: 漳平市| 鲜城| 茶陵县| 蓬溪县| 江山市| 正蓝旗| 瑞安市| 彰化市| 盱眙县| 澎湖县| 德安县| 乐亭县| 于都县| 庆元县| 灵山县| 独山县| 平乐县| 曲水县| 寻乌县| 九龙城区| 兴隆县| 塔城市| 宣恩县| 九龙坡区| 北海市| 合阳县| 迁西县| 鞍山市| 施甸县| 雅江县| 元谋县| 嘉善县| 郸城县| 西畴县| 嘉义县| 麻江县| 老河口市| 黄石市| 城固县| 大石桥市| 绵竹市|