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

C++分析研究  
C++
日歷
<2013年3月>
242526272812
3456789
10111213141516
17181920212223
24252627282930
31123456
統(tǒng)計(jì)
  • 隨筆 - 92
  • 文章 - 4
  • 評論 - 4
  • 引用 - 0

導(dǎo)航

常用鏈接

留言簿

隨筆檔案

文章檔案

搜索

  •  

最新評論

閱讀排行榜

評論排行榜

 
  在日常的編程中,有時(shí)候需要在結(jié)構(gòu)體中存放一個(gè)長度動態(tài)的字符串,一般的做法,是在結(jié)構(gòu)體中定義一個(gè)指針成員,這個(gè)指針成員指向該字符串所在的動態(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"的地址了。這時(shí)候p成了多余的東西,可以去掉。但是,又產(chǎn)生了另外一個(gè)問題:老是使用(char*)((stpTest + 1)不方便。如果能夠找出一種方法,既能直接引用該字符串,又不占用結(jié)構(gòu)體的空間,就完美了,符合這種條件的代碼結(jié)構(gòu)應(yīng)該是一個(gè)非對象的符號地址,在結(jié)構(gòu)體的尾部放置一個(gè)0長度的數(shù)組是一個(gè)絕妙的解決方案。不過,C/C++標(biāo)準(zhǔn)規(guī)定不能定義長度為0的數(shù)組,因此,有些編譯器就把0長度的數(shù)組成員作為自己的非標(biāo)準(zhǔn)擴(kuò)展。
 
   在講述柔性數(shù)組成員之前,首先要介紹一下不完整類型(incomplete type)。不完整類型是這樣一種類型,它缺乏足夠的信息例如長度去描述一個(gè)完整的對象,它的出現(xiàn)反映了C程序員對精煉代碼的極致追求,這種代碼結(jié)構(gòu)產(chǎn)生于對動態(tài)結(jié)構(gòu)體的需求。
 
   鑒于這種代碼結(jié)構(gòu)所產(chǎn)生的重要作用,C99甚至把它收入了標(biāo)準(zhǔn)中。C99使用不完整類型實(shí)現(xiàn)柔性數(shù)組成員,在C99 中,結(jié)構(gòu)中的最后一個(gè)元素允許是未知大小的數(shù)組,這就叫做柔性數(shù)組(flexible array)成員(也叫伸縮性數(shù)組成員),但結(jié)構(gòu)中的柔性數(shù)組成員前面必須至少一個(gè)其他成員。柔性數(shù)組成員允許結(jié)構(gòu)中包含一個(gè)大小可變的數(shù)組。柔性數(shù)組成員只作為一個(gè)符號地址存在,而且必須是結(jié)構(gòu)體的最后一個(gè)成員,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];
 
   };
 
   有些編譯器會報(bào)錯(cuò)無法編譯可以改成:
 
   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就是一個(gè)柔性數(shù)組成員,如果把stpTest指向的動態(tài)分配內(nèi)存看作一個(gè)整體,c就是一個(gè)長度可以動態(tài)變化的結(jié)構(gòu)體成員,柔性一詞來源于此。c的長度為0,因此它不占用test的空間,同時(shí)stpTest->c就是“hello world”的首地址,不需要再使用(char *)(stpTest + 1)這么丑陋的代碼了。那個(gè)0個(gè)元素的數(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)擴(kuò)展來支持,而且在C99 發(fā)布之前已經(jīng)有了這種非標(biāo)準(zhǔn)擴(kuò)展了,C99 發(fā)布之后,有些編譯器把兩者合而為一了. www.qcwy123.com   托福答案
 
 
posted on 2014-02-08 15:48 HAOSOLA 閱讀(567) 評論(0)  編輯 收藏 引用
 
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>
            亚洲精品视频在线观看免费| 久久网站免费| 亚洲影院在线观看| 亚洲第一区在线观看| 国产精品久久久一区二区三区 | 亚洲一品av免费观看| 激情综合中文娱乐网| 国产精品毛片a∨一区二区三区|国 | 亚洲少妇最新在线视频| 美女精品在线| 91久久亚洲| 老司机久久99久久精品播放免费 | 午夜精品国产更新| 亚洲视频电影图片偷拍一区| 亚洲人成小说网站色在线| 国产精品私房写真福利视频| 国产欧美日韩在线观看| 国产主播一区二区三区四区| 韩国成人精品a∨在线观看| 亚洲一区二区视频在线| 亚洲自拍偷拍一区| 午夜精品www| 久久综合狠狠综合久久激情| 久久福利影视| 亚洲伦理在线| 久久国产精品久久国产精品| 久久综合伊人| 欧美一区二区三区男人的天堂| 久久久噜噜噜久久狠狠50岁| 久久婷婷麻豆| 亚洲精品欧美| 欧美激情精品久久久久久免费印度| 欧美激情精品久久久久| 91久久午夜| 正在播放亚洲| 欧美成人一二三| 国产精品蜜臀在线观看| 国产在线欧美| 亚洲在线一区二区三区| 久久人人爽人人爽爽久久| 欧美成人免费在线视频| 午夜精品久久久久久久久久久久久 | 欧美成人一品| 亚洲性视频网址| 毛片一区二区三区| 一区二区三区视频在线| 久久久久久久综合色一本| 欧美成人一品| 国产麻豆日韩欧美久久| 亚洲视频香蕉人妖| 模特精品裸拍一区| 亚洲一区bb| 欧美日韩国产精品一卡| 国内精品久久久久久久影视蜜臀 | 久久精品国产精品亚洲综合 | 久久av资源网| 欧美日韩精品二区| 国产精品天天摸av网| 亚洲美女黄色| 另类激情亚洲| 久久久免费精品视频| 国产精品久久久久一区二区| 亚洲国产成人不卡| 亚洲视频精选在线| 91久久精品美女高潮| 午夜一区二区三视频在线观看| 欧美大片免费观看| 亚洲国产另类久久精品| 久久蜜桃资源一区二区老牛| 亚洲视频在线视频| 亚洲一区免费视频| 欧美区在线播放| 一本色道久久综合亚洲91| 老巨人导航500精品| 亚洲午夜视频在线观看| 在线成人小视频| 性欧美8khd高清极品| 91久久久久| 欧美gay视频激情| 一区二区国产在线观看| 亚洲成人资源| 亚洲精品久久久久久久久久久久| 久久久久欧美精品| 国产日韩欧美亚洲一区| 欧美在线观看视频| 久久久久综合| 亚洲欧洲一区二区三区久久| 欧美韩日高清| 欧美日韩亚洲三区| 亚洲免费视频网站| 亚洲亚洲精品在线观看| 国产日产欧美精品| 米奇777超碰欧美日韩亚洲| 亚洲自拍高清| 国产欧美一区二区色老头| 久久精品一区二区三区不卡| 老司机精品福利视频| 亚洲黑丝在线| 亚洲精品免费电影| 精品盗摄一区二区三区| 欧美a级理论片| 欧美国产免费| 中文欧美字幕免费| 99视频+国产日韩欧美| 国产日韩欧美成人| 女人色偷偷aa久久天堂| 欧美—级在线免费片| 久久久久久久网站| 欧美电影在线观看完整版| 99国内精品久久久久久久软件| 香蕉乱码成人久久天堂爱免费| 激情欧美亚洲| 亚洲精品免费在线播放| 精品成人在线视频| 亚洲日本中文字幕免费在线不卡| 美女主播视频一区| 久久人人精品| 欧美日韩一区二区三区在线看| 亚洲国产老妈| 久久亚洲精品欧美| 亚洲欧美制服另类日韩| 久久综合色综合88| 国产精品亚洲成人| 亚洲高清av在线| 欧美日韩三级| 亚洲日本中文字幕免费在线不卡| 国产日本欧美在线观看 | 亚洲精品免费看| 欧美电影免费| 欧美中文字幕在线观看| 欧美肥婆在线| 久久精品一区二区| 国产偷国产偷亚洲高清97cao| 中文精品视频| 亚洲视频在线一区观看| 国产精品一区在线播放| 韩日精品视频| 日韩一级免费| 夜夜嗨av一区二区三区| 久久精品在线视频| 国产美女精品人人做人人爽| 亚洲电影免费在线| 国产一区欧美日韩| 久久综合综合久久综合| 女同性一区二区三区人了人一| 激情成人综合网| 麻豆免费精品视频| 亚洲国产另类久久久精品极度| 亚洲高清在线视频| 欧美激情性爽国产精品17p| 91久久精品日日躁夜夜躁国产| 亚洲精品一区二区三区婷婷月 | 亚洲精品欧美专区| 一本色道88久久加勒比精品| 欧美美女福利视频| 亚洲视频专区在线| 老司机午夜精品视频| 亚洲欧洲综合另类| 国产精品a久久久久| 亚洲欧美一区二区三区在线| 久久久久久9| 亚洲欧洲一区二区三区久久| 欧美日本一区二区高清播放视频| 国产精品a级| 日韩一区二区久久| 国产精品久久久久久久久久久久久| 亚洲视频在线免费观看| 久热这里只精品99re8久| 亚洲人成精品久久久久| 国产精品国色综合久久| 久久全国免费视频| aa成人免费视频| 久热成人在线视频| 亚洲一区在线观看免费观看电影高清| 国产欧美精品日韩精品| 老鸭窝毛片一区二区三区| 一区二区三区精品国产| 欧美ed2k| 久久久久9999亚洲精品| 一本色道久久综合狠狠躁篇的优点 | 在线精品观看| 欧美视频在线观看免费网址| 午夜欧美不卡精品aaaaa| 亚洲激情自拍| 久久三级福利| 午夜亚洲伦理| 亚洲精品日韩综合观看成人91 | 一区二区欧美在线| 黄色成人在线免费| 国产精品毛片大码女人| 久久人人超碰| 小黄鸭精品aⅴ导航网站入口| 亚洲激情午夜| 男女激情视频一区| 久久久久久电影| 亚洲欧美日韩综合aⅴ视频| 亚洲精品综合久久中文字幕| 国内精品视频久久| 模特精品裸拍一区| 欧美一级视频精品观看|