• <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>

            大龍的博客

            常用鏈接

            統(tǒng)計(jì)

            最新評論

            談?wù)凜99的新特征:復(fù)合文字(compound literal)和伸縮型數(shù)組

            在C99標(biāo)準(zhǔn)以前:可以給函數(shù)傳遞數(shù)組,但是沒有所謂的數(shù)組常量可以來傳遞。C99新增了復(fù)合文字。文字是非符號常量。例如:5是int類型的文字;82.3是float類型的文字等等。C99標(biāo)準(zhǔn)委員會認(rèn)為:如果又能夠表示數(shù)組和結(jié)構(gòu)內(nèi)容的復(fù)合文字,那么在編寫程序的時(shí)候要方便的多。 對于數(shù)組來說,復(fù)合文字看起來像在數(shù)組的初始化列表前加上圓括號括起來的類型名。例如,下面是普通數(shù)組的聲明方式: int diva[2] = {10,20}; 下面是一個(gè)復(fù)合文字,創(chuàng)建了一個(gè)包含兩個(gè)int值的無名稱數(shù)組: (int[2])(10,20); 注意:類型名就是前面聲明中去掉diva后剩下的部分。 正如初始化一個(gè)命名數(shù)組時(shí)可以省略數(shù)組大小一樣,復(fù)合文字也可以,如: (int []){1,2,3}; 由于這些復(fù)合文字沒有名稱,因此不可能在一個(gè)語句中創(chuàng)建它們,然后在另一個(gè)語句中使用它們。而是必須在創(chuàng)建的同時(shí)使用某種方法來使用它們,一種方法是使用指針保存它們的位置,比如: int* ptr; ptr = (int [2]){3,4}; 于是*ptr就是3,ptr[1]是4. 另外,復(fù)合文字也可以也可以作為實(shí)際參數(shù)被傳遞到帶有類型與之匹配的形式參數(shù)的函數(shù)中: int sum(int ar[],int n); ... int totle; totle = sum((int [3]{1,2,3}),3);這非常方便,使我想起了c++中pair容器中的一個(gè)pair方法,也像python語言中的lambda,一次性的使用特性。 結(jié)構(gòu)體也是一樣的,比如: int add(struct xy instance) { return instance.x+instance.y; } 可以這樣調(diào)用: int sum = add((struct xy){1,2}); 第二個(gè)很讓人欣喜的特性是伸縮型數(shù)組,它用于結(jié)構(gòu)體中。這個(gè)特性可以聲明最后一個(gè)成員是一個(gè)具有特殊屬性的數(shù)組。該特使屬性有兩點(diǎn),1.這個(gè)數(shù)組不存在,至少不是立即存在的。2.我們可以編寫代碼適當(dāng)?shù)氖褂迷摂?shù)組成員,就像它確實(shí)存在而且擁有你需要的任何數(shù)目的元素一樣。聽起來很奇怪,我們看一些例子. 首先看看聲明這么一個(gè)結(jié)構(gòu)體的規(guī)則: 1.伸縮型數(shù)組成員必須是最后一個(gè)數(shù)組成員 2.結(jié)構(gòu)中必須至少有一個(gè)其他成員 3.伸縮型數(shù)組就像普通數(shù)組一樣被聲明,除了他的方括號是空的 比如: struct flex { int count; double average; double score[]; }; 如果聲明了一個(gè)struct xy的結(jié)構(gòu)體,你不能使用score做任何事情,因?yàn)闆]有為他分配內(nèi)存空間。實(shí)際上,C99的意圖不是讓你struct xy類型的變量,而是希望你聲明一個(gè)指向這個(gè)結(jié)構(gòu)體類型的指針,然后用malloc來分配合適的內(nèi)存空間。例如,假設(shè)想要用score表示含有5個(gè)double型數(shù)值的數(shù)組,那么要這樣做: struct flex ptr; ptr = malloc(sizeof(struct flex) + 5*sizeof(double));現(xiàn)在我們有了足夠的內(nèi)存,以存儲count,average和5個(gè)double型數(shù)值的數(shù)組了。可以使用ptr來訪問他們: ptr->count = 5; ptr->score[2] = 12.3; 你可以在你任何時(shí)候修改這個(gè)結(jié)構(gòu)體的占用空間的大小。 這正是讓人高興~~

            posted on 2010-03-29 19:24 大龍 閱讀(323) 評論(0)  編輯 收藏 引用


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


            伊人久久大香线蕉综合网站| 久久久久一级精品亚洲国产成人综合AV区| 亚洲国产成人精品无码久久久久久综合 | 国产精品一区二区久久精品无码 | 国内精品久久久久久野外| 亚洲乱亚洲乱淫久久| 三级三级久久三级久久| 久久亚洲国产欧洲精品一| 日韩久久无码免费毛片软件| 精品熟女少妇a∨免费久久| 欧美成a人片免费看久久| 亚洲国产精品久久电影欧美| 久久久久99精品成人片三人毛片| 久久久久久毛片免费播放| 国产成人综合久久精品红| 久久国产免费直播| 亚洲精品高清国产一久久| 精品人妻久久久久久888| 一本大道久久东京热无码AV | 亚洲欧美一级久久精品| 国产激情久久久久影院| 日产精品99久久久久久| 狠狠色丁香久久婷婷综合| 一本色道久久88综合日韩精品| 日本三级久久网| 91麻豆精品国产91久久久久久| 久久se精品一区精品二区| 久久精品国产91久久麻豆自制| 亚洲精品美女久久久久99| 亚洲午夜久久久久久噜噜噜| 久久精品国产亚洲AV久| 热99RE久久精品这里都是精品免费 | 亚洲欧美伊人久久综合一区二区| 久久精品国产2020| 亚洲精品无码成人片久久| 人妻无码αv中文字幕久久琪琪布| 国产成人久久精品一区二区三区| 热99RE久久精品这里都是精品免费 | 久久国产精品久久国产精品| 久久综合狠狠综合久久激情 | 狠狠色丁香婷婷综合久久来来去|