青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

C++分析研究  
C++
日歷
<2025年12月>
30123456
78910111213
14151617181920
21222324252627
28293031123
45678910
統(tǒng)計
  • 隨筆 - 92
  • 文章 - 4
  • 評論 - 4
  • 引用 - 0

導(dǎo)航

常用鏈接

留言簿

隨筆檔案

文章檔案

搜索

  •  

最新評論

閱讀排行榜

評論排行榜

 
  在日常的編程中,有時候需要在結(jié)構(gòu)體中存放一個長度動態(tài)的字符串,一般的做法,是在結(jié)構(gòu)體中定義一個指針成員,這個指針成員指向該字符串所在的動態(tài)內(nèi)存空間,例如:
 
   typedef struct test
 
   {
 
   int a;
 
   double b;
 
   char *p;
 
   };
 
   p指向字符串。這種方法造成字符串與結(jié)構(gòu)體是分離的,不利于操作。如果把字符串跟結(jié)構(gòu)體直接連在一起,不是更好嗎?于是,可以把代碼修改為這樣:
 
   char a[] = "hello world";
 
   test *stpTest = (test *)malloc(sizeof(test) + strlen( a ) + 1 );
 
   strcpy(stpTest + 1, a );
 
   這樣一來,(char*)(stpTest + 1)就是字符串"hello world"的地址了。這時候p成了多余的東西,可以去掉。但是,又產(chǎn)生了另外一個問題:老是使用(char*)((stpTest + 1)不方便。如果能夠找出一種方法,既能直接引用該字符串,又不占用結(jié)構(gòu)體的空間,就完美了,符合這種條件的代碼結(jié)構(gòu)應(yīng)該是一個非對象的符號地址,在結(jié)構(gòu)體的尾部放置一個0長度的數(shù)組是一個絕妙的解決方案。不過,C/C++標(biāo)準(zhǔn)規(guī)定不能定義長度為0的數(shù)組,因此,有些編譯器就把0長度的數(shù)組成員作為自己的非標(biāo)準(zhǔn)擴展。
 
   在講述柔性數(shù)組成員之前,首先要介紹一下不完整類型(incomplete type)。不完整類型是這樣一種類型,它缺乏足夠的信息例如長度去描述一個完整的對象,它的出現(xiàn)反映了C程序員對精煉代碼的極致追求,這種代碼結(jié)構(gòu)產(chǎn)生于對動態(tài)結(jié)構(gòu)體的需求。
 
   鑒于這種代碼結(jié)構(gòu)所產(chǎn)生的重要作用,C99甚至把它收入了標(biāo)準(zhǔn)中。C99使用不完整類型實現(xiàn)柔性數(shù)組成員,在C99 中,結(jié)構(gòu)中的最后一個元素允許是未知大小的數(shù)組,這就叫做柔性數(shù)組(flexible array)成員(也叫伸縮性數(shù)組成員),但結(jié)構(gòu)中的柔性數(shù)組成員前面必須至少一個其他成員。柔性數(shù)組成員允許結(jié)構(gòu)中包含一個大小可變的數(shù)組。柔性數(shù)組成員只作為一個符號地址存在,而且必須是結(jié)構(gòu)體的最后一個成員,sizeof 返回的這種結(jié)構(gòu)大小不包括柔性數(shù)組的內(nèi)存。柔性數(shù)組成員不僅可以用于字符數(shù)組,還可以是元素為其它類型的數(shù)組。包含柔性數(shù)組成員的結(jié)構(gòu)用malloc()函數(shù)進(jìn)行內(nèi)存的動態(tài)分配,并且分配的內(nèi)存應(yīng)該大于結(jié)構(gòu)的大小,以適應(yīng)柔性數(shù)組的預(yù)期大小。柔性數(shù)組的使用請看下面的例子:
 
   typedef struct test
 
   {
 
   int a;
 
   double b;
 
   char c[0];
 
   };
 
   有些編譯器會報錯無法編譯可以改成:
 
   typedef struct test
 
   {
 
   int a;
 
   double b;
 
   char c[];
 
   };
 
   通過如下表達(dá)式給結(jié)構(gòu)體分配內(nèi)存:
 
   test *stpRest = (test *)malloc(sizeof(test)+100*sizeof(char));
 
   c就是一個柔性數(shù)組成員,如果把stpTest指向的動態(tài)分配內(nèi)存看作一個整體,c就是一個長度可以動態(tài)變化的結(jié)構(gòu)體成員,柔性一詞來源于此。c的長度為0,因此它不占用test的空間,同時stpTest->c就是“hello world”的首地址,不需要再使用(char *)(stpTest + 1)這么丑陋的代碼了。那個0個元素的數(shù)組沒有占用空間,而后我們可以進(jìn)行變長操作了。這樣我們?yōu)榻Y(jié)構(gòu)體指針c分配了一塊內(nèi)存。用stpTest->c[n]就能簡單地訪問可變長元素。
 
   當(dāng)然,上面既然用malloc 函數(shù)分配了內(nèi)存,肯定就需要用free 函數(shù)來釋放內(nèi)存:
 
   free(stpTest);
 
   應(yīng)當(dāng)盡量使用標(biāo)準(zhǔn)形式,在非C99的場合,可以使用指針方法。需要說明的是:C89不支持這種東西,C99把它作為一種特例加入了標(biāo)準(zhǔn)。但是,C99所支持的是incomplete type,而不是zero array,形同int a[0];這種形式是非法的,C99 支持的形式是形同int a[];只不過有些編譯器把int a[0];作為非標(biāo)準(zhǔn)擴展來支持,而且在C99 發(fā)布之前已經(jīng)有了這種非標(biāo)準(zhǔn)擴展了,C99 發(fā)布之后,有些編譯器把兩者合而為一了. www.qcwy123.com   托福答案
 
 
posted on 2014-02-08 15:48 HAOSOLA 閱讀(575) 評論(0)  編輯 收藏 引用

只有注冊用戶登錄后才能發(fā)表評論。
網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


 
Copyright © HAOSOLA Powered by: 博客園 模板提供:滬江博客
PK10開獎 PK10開獎
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            在线播放日韩专区| 国产亚洲福利社区一区| 1769国内精品视频在线播放| 欧美在线精品一区| 亚洲欧美在线另类| 国产在线精品成人一区二区三区| 久久成人精品视频| 久久aⅴ乱码一区二区三区| 一区二区在线观看视频| 欧美大色视频| 欧美色123| 久久精品亚洲一区二区| 久久久久国产精品午夜一区| 亚洲国产精品成人| 一本色道久久综合狠狠躁的推荐| 国产精品资源在线观看| 女人天堂亚洲aⅴ在线观看| 欧美精品久久一区二区| 欧美一进一出视频| 久久中文字幕一区| 亚洲综合精品四区| 久久视频一区二区| 亚洲一级网站| 麻豆成人综合网| 亚洲影院色在线观看免费| 欧美在线在线| 亚洲综合第一页| 另类国产ts人妖高潮视频| 亚洲一区一卡| 免费日韩av片| 久久久久久久久久码影片| 欧美二区不卡| 久久综合五月| 国产精品日韩欧美综合| 亚洲福利精品| 国产一区二区视频在线观看| 91久久亚洲| 在线观看亚洲a| 午夜精品福利一区二区蜜股av| 91久久精品日日躁夜夜躁欧美 | 亚洲夫妻自拍| 亚洲午夜精品一区二区| 亚洲国产精品传媒在线观看 | 亚洲理伦在线| 在线观看亚洲精品| 亚洲欧美激情一区二区| 日韩午夜av在线| 久久综合色88| 媚黑女一区二区| 国产欧美另类| 一区二区三区产品免费精品久久75| 亚洲大胆人体视频| 久久精品二区| 久久久www免费人成黑人精品 | 国产乱码精品一区二区三区不卡 | 亚洲欧美日韩在线不卡| 欧美激情一区二区三级高清视频 | 久久成人免费电影| 欧美手机在线视频| 亚洲三级免费| 亚洲每日更新| 欧美日韩国产不卡| 亚洲国产精品999| 亚洲国产精品一区二区第一页| 欧美一区二区私人影院日本| 欧美亚洲一区二区三区| 国产精品一区一区三区| 亚洲一区二区精品| 午夜一级在线看亚洲| 国产精品美女主播在线观看纯欲| 日韩视频免费观看| 99综合电影在线视频| 欧美日韩色一区| 一区二区三区精品| 亚洲一区二区三区四区在线观看| 欧美日韩免费视频| 亚洲一区二区三区精品动漫| 亚洲欧美一级二级三级| 国产日产欧产精品推荐色| 久久国产免费看| 欧美大片免费久久精品三p| 亚洲国产精品悠悠久久琪琪| 欧美金8天国| 亚洲午夜视频在线| 久久久综合激的五月天| 亚洲高清色综合| 欧美日韩成人免费| 亚洲欧美日韩一区| 免费亚洲一区二区| 一本色道久久| 国产小视频国产精品| 麻豆精品视频在线观看视频| 亚洲精品久久久久久久久| 午夜在线电影亚洲一区| 在线成人h网| 欧美午夜女人视频在线| 性欧美办公室18xxxxhd| 亚洲高清色综合| 性xx色xx综合久久久xx| 在线免费一区三区| 欧美三级资源在线| 久久久九九九九| 亚洲乱码日产精品bd| 久久久久久一区| 亚洲私人影吧| 在线看视频不卡| 国产精品一二一区| 欧美大片免费观看在线观看网站推荐| 夜夜爽夜夜爽精品视频| 蜜臀久久99精品久久久画质超高清 | 欧美激情第五页| 欧美一区二区三区久久精品茉莉花| 欧美大片国产精品| 久久精品卡一| 亚洲免费在线播放| 亚洲精品孕妇| 亚洲成色www久久网站| 国产裸体写真av一区二区| 欧美成人精品一区二区| 欧美在线免费视屏| 亚洲一区二区三区777| 亚洲精品久久7777| 欧美黄色成人网| 久久久久久久久岛国免费| 亚洲一区免费网站| 亚洲精品一区二区三区福利| 国内精品久久久久影院优| 国产精品毛片a∨一区二区三区|国| 欧美成人免费在线视频| 久久视频在线免费观看| 欧美在线91| 欧美一区2区三区4区公司二百| av成人动漫| 日韩亚洲欧美精品| 亚洲精品欧美日韩| 亚洲国产精品ⅴa在线观看 | 欧美成人精品1314www| 久久er99精品| 久久精品首页| 久久久久在线观看| 久久亚洲精品伦理| 久久久精品一区| 久久久99久久精品女同性| 久久精品国产精品亚洲综合| 性欧美精品高清| 久久精品夜夜夜夜久久| 欧美一区激情| 久久亚洲精品网站| 蜜臀av一级做a爰片久久 | 一区二区三区精品国产| 一本大道久久a久久精二百| 一区二区三区不卡视频在线观看| 亚洲精品国产精品国自产观看浪潮 | 亚洲激情中文1区| 亚洲免费观看高清在线观看| 99re66热这里只有精品4| 中国女人久久久| 先锋影音国产精品| 久久久久久婷| 亚洲第一天堂av| 日韩天堂在线视频| 亚洲一区二区三区四区五区午夜| 亚洲专区在线| 另类图片综合电影| 欧美日韩精品二区| 国产日韩欧美在线观看| 精品二区久久| 一级日韩一区在线观看| 亚洲欧美成人一区二区三区| 久久久久久网址| 91久久国产综合久久91精品网站| 一区二区高清在线观看| 久久国产精品99国产精| 欧美大秀在线观看| 国产精品一卡二卡| 91久久精品国产| 亚洲欧美精品一区| 欧美成年人视频| 亚洲一线二线三线久久久| 久久久久亚洲综合| 欧美三级在线| 1024成人网色www| 亚洲视频999| 看片网站欧美日韩| 99亚洲视频| 久久久久看片| 国产精品嫩草99av在线| 亚洲国产婷婷综合在线精品 | 久久精视频免费在线久久完整在线看| 免费精品99久久国产综合精品| 亚洲美女尤物影院| 久久躁狠狠躁夜夜爽| 国产精品欧美精品| 亚洲美女黄色片| 久久久之久亚州精品露出| 洋洋av久久久久久久一区| 免费成人在线视频网站| 国产亚洲精久久久久久| 亚洲综合视频1区| 亚洲国产欧洲综合997久久|