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

woaidongmao

文章均收錄自他人博客,但不喜標題前加-[轉貼],因其丑陋,見諒!~
隨筆 - 1469, 文章 - 0, 評論 - 661, 引用 - 0
數據加載中……

下標是空的數組

最近看到這種代碼:
struct mytype
{
int cnt;
int data[0];//
這個,是什么啊!0個元素的數組????編譯器居然通過了!!!什么東西????
};
---------------------------------------------------------------

int data[0];//
定義一個數組0個元素,編譯沒有錯,但是這個不能用于輸入,因為是沒有元素的數組
---------------------------------------------------------------

所以當輸入的時候,就等于越界了。
---------------------------------------------------------------

樓主可以算算一下數組的大?。?span lang="EN-US">

sizeof(mytype.data);//
這樣可能有的編譯器會報錯,有的可能等于0
---------------------------------------------------------------

這是一種trick,用來做變長數組
---------------------------------------------------------------

這個叫做靈活數組成員

看我的文章

結構體變長的妙用——0個元素的數組
有時我們需要產生一個結構體,實現了一種可變長度的結構。如何來實現呢?
看這個結構體的定義:
typedef struct st_type
{
int nCnt;
int item[0];
}type_a;
(有些編譯器會報錯無法編譯可以改成:)
typedef struct st_type
{
int nCnt;
int item[];
}type_a;
這樣我們就可以定義一個可變長的結構,用sizeof(type_a)得到的只有4,就是sizeof(nCnt)=sizeof(int)那個0個元素的數組沒有占用空間,而后我們可以進行變長操作了。
C
語言版:
type_a *p = (type_a*)malloc(sizeof(type_a)+100*sizeof(int));
C++
語言版:
type_a *p = (type_a*)new char[sizeof(type_a)+100*sizeof(int)];
這樣我們就產生了一個長為100type_a類型的東西用p->item[n]就能簡單地訪問可變長元素,原理十分簡單,分配了比sizeof(type_a)多的內存后int item[];就有了其意義了,它指向的是int nCnt;后面的內容,是沒有內存需要的,而在分配時多分配的內存就可以由其來操控,是個十分好用的技巧。
而釋放同樣簡單:
C
語言版:
free(p);
C++
語言版:
delete []p;
其實這個叫靈活數組成員(fleible array member)C89不支持這種東西,C99把它作為一種特例加入了標準。但是,C99所支持的是incomplete type,而不是zero array,形同int item[0];這種形式是非法的,C99支持的形式是形同int item[];只不過有些編譯器把int item[0];作為非標準擴展來支持,而且在C99發布之前已經有了這種非標準擴展了,C99發布之后,有些編譯器把兩者合而為一。
下面是C99中的相關內容:
6.7.2
.1 Structure and union specifiers

    As a special case, the last element of a structure with more than one named member may have an incomplete array type; this is called a flexible array member. With two exceptions, the flexible array member is ignored. First, the size of the structure shall be equal to the offset of the last element of an otherwise identical structure that replaces the flexible array member with an array of unspecified length.106) Second, when a . (or ->) operator has a left operand that is (a pointer to) a structure with a flexible array member and the right operand names that member, it behaves as if that member were replaced with the longest array (with the same element type) that would not make the structure larger than the object being accessed; the offset of the array shall remain that of the flexible array member, even if this would differ from that of the replacement array. If this array would have no elements, it behaves as if it had one element but the behavior is undefined if any attempt is made to access that element or to generate a pointer one past it.
例如在VC++6里使用兩者之一都能通過編譯并且完成操作,而會產生warning C4200: nonstandard extension used : zero-sized array in struct/union的警告消息。
而在DEVCPP里兩者同樣可以使用,并且不會有警告消息。

---------------------------------------------------------------

data
是用來做變長數組的,
不過一般都是 長度為 ...
---------------------------------------------------------------

一般這樣用

先定義一個指向該struct的指針p
然后
p=malloc(sizeof( mytype)+ user_length);
p->cnt = user_length;

這樣就相當于有了一個可變長的數組,其長度保存在p->cnt當中。


---------------------------------------------------------------

變長數組,不過這種實現變長數組的方法比較晦澀
---------------------------------------------------------------

呵呵.你要學的東西多了..
看看linux 源碼,特別tcp/ip,網絡相關的.很多這樣的應用..
---------------------------------------------------------------

變長數組!!
沒有什么特別的,和平常的內存分配一個樣,
我們以前使用
Type* t = (Type*)malloc(sizeof(Type));
這個只是分配剛好存放Type的地方,其實我們也可以分配比Type類型少的內存,
比如:
typedef struct st_type
{
int nCnt;
int item[4];
}type_a;
--------------------
type_a * a=(type_a*)malloc(4);//
剛好分配了type_a::nCnt的空間而已!
那也肯定可以操作,只是item的空間沒有存在而已,比如:
a->nCnt = 2;
cout<<a->nCnt<<endl;

------------------------------------------
當然也可以分配多啊,剩下的東西怎么處理看程序員的操作啊!
其實
typedef struct st_type
{
int nCnt;
int item[0];
}type_a;
type_a* a = (type_a*)malloc(104);
的意思中item只是給編譯器一個地址的起始,多了這個內存就是多余了拉!但多余的內存和我們

posted on 2010-04-01 16:42 肥仔 閱讀(979) 評論(0)  編輯 收藏 引用 所屬分類: C++ 基礎

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            久久亚洲高清| 亚洲乱码国产乱码精品精可以看 | 欧美一区在线视频| 亚洲小少妇裸体bbw| 日韩小视频在线观看专区| 欧美黄色影院| 午夜久久久久| 久久亚洲精品一区二区| 免费成人高清| 最新成人av在线| 日韩一区二区精品葵司在线| 亚洲视频精选| 久久久久国色av免费看影院 | 欧美另类高清视频在线| 欧美视频精品一区| 国产精品日韩久久久| 国产精品永久免费| 精品二区视频| 宅男噜噜噜66一区二区66| 欧美一区激情| 亚洲国产精品精华液网站| 国产精品99久久99久久久二8| 欧美在线免费观看| 欧美激情一区在线| 国内精品久久久久影院 日本资源 国内精品久久久久伊人av | 日韩亚洲成人av在线| 亚洲欧美国产精品桃花| 欧美凹凸一区二区三区视频| 欧美小视频在线| 亚洲成色精品| 亚洲永久在线| 亚洲国产精品第一区二区| 亚洲先锋成人| 欧美成人一区二区三区片免费| 国产精品电影观看| 亚洲区一区二| 久久综合狠狠| 亚洲一区二区三区在线观看视频| 蜜桃av噜噜一区二区三区| 国产精品国产三级国产aⅴ9色| 亚洲国产欧洲综合997久久| 久久精品人人做人人爽| 一本色道久久加勒比精品| 蜜臀av国产精品久久久久| 国产一区观看| 性久久久久久久| 日韩亚洲视频在线| 欧美激情精品久久久久久黑人| 狠狠色丁香婷婷综合影院| 欧美一区二区三区免费视频| 中国成人黄色视屏| 欧美色中文字幕| 一区二区三区欧美在线| 亚洲国产一区二区三区高清| 另类av导航| 亚洲国产综合视频在线观看| 久久在线观看视频| 久久国产精品网站| 韩日视频一区| 亚洲欧洲一区二区三区在线观看| 国产精品日韩精品| 一本色道久久加勒比精品| 亚洲国内精品| 欧美日韩不卡合集视频| aaa亚洲精品一二三区| 亚洲激情影视| 欧美日韩系列| 一区二区三区四区蜜桃| 日韩午夜电影在线观看| 国产精品国产三级国产普通话蜜臀 | 亚洲国产精品精华液2区45| 久热精品视频在线观看| 激情久久综艺| 欧美成人一区在线| 欧美a级理论片| 在线亚洲精品| 中国亚洲黄色| 国产日韩精品入口| 久久久综合免费视频| 久久久久久久久伊人| 亚洲电影成人| 亚洲激情在线激情| 国产精品爱啪在线线免费观看| 午夜在线视频观看日韩17c| 亚洲欧美在线一区二区| 亚洲高清不卡av| 日韩视频在线你懂得| 国产精品一区二区女厕厕| 久久精品一二三区| 欧美jizzhd精品欧美喷水| 中文国产一区| 久久成人免费电影| 日韩一区二区免费看| 亚洲视频专区在线| 黑人操亚洲美女惩罚| 亚洲欧洲久久| 国产一区二区久久| 91久久国产综合久久蜜月精品| 欧美午夜精品| 欧美福利一区二区三区| 欧美体内谢she精2性欧美| 久久先锋影音| 欧美日韩精品不卡| 麻豆久久婷婷| 国产精品久久网| 欧美黄色一区二区| 国产综合色一区二区三区| 91久久精品视频| 影音国产精品| 午夜欧美不卡精品aaaaa| 日韩一区二区久久| 久久久久综合网| 亚洲欧美日韩系列| 欧美精品乱码久久久久久按摩| 久久久久国内| 国产精品r级在线| 亚洲福利视频网| 激情自拍一区| 午夜性色一区二区三区免费视频| 一区二区三区视频在线看| 久久激情中文| 国产精品啊啊啊| 欧美一级网站| 欧美日本在线播放| 欧美激情一区二区三区高清视频| 国产欧美91| 正在播放欧美视频| 一本色道久久综合亚洲91| 老司机精品视频一区二区三区| 久久精品理论片| 国产精品你懂的在线欣赏| 亚洲免费观看在线视频| 最新中文字幕一区二区三区| 久久久久高清| 久久免费国产| 国产资源精品在线观看| 先锋a资源在线看亚洲| 午夜视频一区| 国产精品爽黄69| 一区二区毛片| 亚洲欧美日韩视频一区| 国产精品日韩专区| 亚洲女性裸体视频| 欧美在线观看天堂一区二区三区| 国产精品捆绑调教| 一区二区三区产品免费精品久久75| 亚洲美女区一区| 欧美日本中文字幕| 99国产精品自拍| 亚洲线精品一区二区三区八戒| 欧美视频你懂的| 亚洲一区二区三区涩| 欧美在线资源| 国产综合在线看| 久久亚洲精选| 亚洲国产精品一区二区久| 一本综合久久| 欧美视频在线观看| 亚洲少妇诱惑| 久久久久高清| 亚洲精品国精品久久99热一| 欧美日韩国产成人在线观看| 中文日韩欧美| 老鸭窝亚洲一区二区三区| 亚洲欧洲一区二区三区久久| 欧美性大战xxxxx久久久| 午夜精品久久久久久| 欧美成人a视频| 亚洲午夜在线观看| 国产一区二区三区在线观看网站| 久久色中文字幕| 99在线精品视频在线观看| 久久精品国产免费| 日韩一二在线观看| 国产精品永久免费在线| 美女视频黄a大片欧美| 亚洲视频一区二区| 欧美激情按摩| 欧美在线在线| 亚洲精品无人区| 国产一区深夜福利| 欧美日韩精品欧美日韩精品| 欧美制服丝袜| 一本色道久久综合狠狠躁的推荐| 欧美~级网站不卡| 性xx色xx综合久久久xx| 亚洲精品中文字幕女同| 伊人精品久久久久7777| 国产精品成人免费| 欧美成人国产| 久久人人爽国产| 亚洲男人天堂2024| 洋洋av久久久久久久一区| 亚洲国产老妈| 久久婷婷国产综合精品青草| 中文网丁香综合网| 91久久精品国产91久久| 欧美aa国产视频| 久久久噜噜噜久久狠狠50岁| 先锋影音国产精品|