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

[HORSETAIL]

花兒,總會(huì)有謝的時(shí)候

  C++博客 :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
  11 隨筆 :: 21 文章 :: 7 評(píng)論 :: 0 Trackbacks

作者:未知???

???????C語(yǔ)言所有復(fù)雜的指針聲明,都是由各種聲明嵌套構(gòu)成的。如何解讀復(fù)雜指針聲明呢?右左法則是一個(gè)既著名又常用的方法。不過(guò),右左法則其實(shí)并不是C標(biāo)準(zhǔn)里面的內(nèi)容,它是從C標(biāo)準(zhǔn)的聲明規(guī)定中歸納出來(lái)的方法。C標(biāo)準(zhǔn)的聲明規(guī)則,是用來(lái)解決如何創(chuàng)建聲明的,而右左法則是用來(lái)解決如何辯識(shí)一個(gè)聲明的,兩者可以說(shuō)是相反的。右左法則的英文原文是這樣說(shuō)的:

The?right-left?rule:?Start?reading?the?declaration?from?the?innermost?parentheses,?go?right,?and?then?go?left.?When?you?encounter?parentheses,?the?direction?should?be?reversed.?Once?everything?in?the?parentheses?has?been?parsed,?jump?out?of?it.?Continue?till?the?whole?declaration?has?been?parsed.?


這段英文的翻譯如下:

右左法則:首先從最里面的圓括號(hào)看起,然后往右看,再往左看。每當(dāng)遇到圓括號(hào)時(shí),就應(yīng)該掉轉(zhuǎn)閱讀方向。一旦解析完圓括號(hào)里面所有的東西,就跳出圓括號(hào)。重復(fù)這個(gè)過(guò)程直到整個(gè)聲明解析完畢。

????????筆者要對(duì)這個(gè)法則進(jìn)行一個(gè)小小的修正,應(yīng)該是從未定義的標(biāo)識(shí)符開(kāi)始閱讀,而不是從括號(hào)讀起,之所以是未定義的標(biāo)識(shí)符,是因?yàn)橐粋€(gè)聲明里面可能有多個(gè)標(biāo)識(shí)符,但未定義的標(biāo)識(shí)符只會(huì)有一個(gè)。

????????現(xiàn)在通過(guò)一些例子來(lái)討論右左法則的應(yīng)用,先從最簡(jiǎn)單的開(kāi)始,逐步加深:

int?(*func)(int?*p);

首先找到那個(gè)未定義的標(biāo)識(shí)符,就是func,它的外面有一對(duì)圓括號(hào),而且左邊是一個(gè)*號(hào),這說(shuō)明func是一個(gè)指針,然后跳出這個(gè)圓括號(hào),先看右邊,也是一個(gè)圓括號(hào),這說(shuō)明(*func)是一個(gè)函數(shù),而func是一個(gè)指向這類函數(shù)的指針,就是一個(gè)函數(shù)指針,這類函數(shù)具有int*類型的形參,返回值類型是int。

int?(*func)(int?*p,?int?(*f)(int*));

func被一對(duì)括號(hào)包含,且左邊有一個(gè)*號(hào),說(shuō)明func是一個(gè)指針,跳出括號(hào),右邊也有個(gè)括號(hào),那么func是一個(gè)指向函數(shù)的指針,這類函數(shù)具有int?*和int?(*)(int*)這樣的形參,返回值為int類型。再來(lái)看一看func的形參int?(*f)(int*),類似前面的解釋,f也是一個(gè)函數(shù)指針,指向的函數(shù)具有int*類型的形參,返回值為int。

int?(*func[5])(int?*p);

func右邊是一個(gè)[]運(yùn)算符,說(shuō)明func是一個(gè)具有5個(gè)元素的數(shù)組,func的左邊有一個(gè)*,說(shuō)明func的元素是指針,要注意這里的*不是修飾func的,而是修飾func[5]的,原因是[]運(yùn)算符優(yōu)先級(jí)比*高,func先跟[]結(jié)合,因此*修飾的是func[5]。跳出這個(gè)括號(hào),看右邊,也是一對(duì)圓括號(hào),說(shuō)明func數(shù)組的元素是函數(shù)類型的指針,它所指向的函數(shù)具有int*類型的形參,返回值類型為int。


int?(*(*func)[5])(int?*p);

func被一個(gè)圓括號(hào)包含,左邊又有一個(gè)*,那么func是一個(gè)指針,跳出括號(hào),右邊是一個(gè)[]運(yùn)算符號(hào),說(shuō)明func是一個(gè)指向數(shù)組的指針,現(xiàn)在往左看,左邊有一個(gè)*號(hào),說(shuō)明這個(gè)數(shù)組的元素是指針,再跳出括號(hào),右邊又有一個(gè)括號(hào),說(shuō)明這個(gè)數(shù)組的元素是指向函數(shù)的指針??偨Y(jié)一下,就是:func是一個(gè)指向數(shù)組的指針,這個(gè)數(shù)組的元素是函數(shù)指針,這些指針指向具有int*形參,返回值為int類型的函數(shù)。

int?(*(*func)(int?*p))[5];

func是一個(gè)函數(shù)指針,這類函數(shù)具有int*類型的形參,返回值是指向數(shù)組的指針,所指向的數(shù)組的元素是具有5個(gè)int元素的數(shù)組。

要注意有些復(fù)雜指針聲明是非法的,例如:

int?func(void)?[5];

func是一個(gè)返回值為具有5個(gè)int元素的數(shù)組的函數(shù)。但C語(yǔ)言的函數(shù)返回值不能為數(shù)組,這是因?yàn)槿绻试S函數(shù)返回值為數(shù)組,那么接收這個(gè)數(shù)組的內(nèi)容的東西,也必須是一個(gè)數(shù)組,但C語(yǔ)言的數(shù)組名是一個(gè)右值,它不能作為左值來(lái)接收另一個(gè)數(shù)組,因此函數(shù)返回值不能為數(shù)組。

int?func[5](void);

func是一個(gè)具有5個(gè)元素的數(shù)組,這個(gè)數(shù)組的元素都是函數(shù)。這也是非法的,因?yàn)閿?shù)組的元素除了類型必須一樣外,每個(gè)元素所占用的內(nèi)存空間也必須相同,顯然函數(shù)是無(wú)法達(dá)到這個(gè)要求的,即使函數(shù)的類型一樣,但函數(shù)所占用的空間通常是不相同的。

作為練習(xí),下面列幾個(gè)復(fù)雜指針聲明給讀者自己來(lái)解析,答案放在第十章里。

int?(*(*func)[5][6])[7][8];

int?(*(*(*func)(int?*))[5])(int?*);

int?(*(*func[7][8][9])(int*))[5];

????????實(shí)際當(dāng)中,需要聲明一個(gè)復(fù)雜指針時(shí),如果把整個(gè)聲明寫(xiě)成上面所示的形式,對(duì)程序可讀性是一大損害。應(yīng)該用typedef來(lái)對(duì)聲明逐層分解,增強(qiáng)可讀性,例如對(duì)于聲明:

int?(*(*func)(int?*p))[5];

可以這樣分解:

typedef??int?(*PARA)[5];
typedef?PARA?(*func)(int?*);

這樣就容易看得多了。

posted on 2007-01-20 13:17 [HORSETAIL] 閱讀(191) 評(píng)論(0)  編輯 收藏 引用 所屬分類: C/C++語(yǔ)言編程綜合問(wèn)題
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            久久精品免视看| 男女精品网站| 99精品国产99久久久久久福利| 久久九九99| 亚洲高清激情| 亚洲国产第一页| 欧美不卡视频一区| 亚洲人成在线播放网站岛国| 亚洲国产天堂久久综合网| 欧美精品www| 亚洲一区二区在线观看视频| 亚洲一级网站| 狠狠干综合网| 亚洲美女中文字幕| 国产视频欧美视频| 欧美激情一区二区| 欧美亚洲不卡| 久久免费精品视频| 欧美精品在线极品| 欧美在线视频全部完| 久久精品理论片| 亚洲成人在线网| 欧美日韩精品免费在线观看视频| 亚洲一区二区三区中文字幕| 欧美在线999| 亚洲视频高清| 久久亚裔精品欧美| 亚洲免费人成在线视频观看| 欧美一二三区精品| 99精品欧美一区二区三区综合在线| 一区二区日韩伦理片| 精品999网站| 一区二区三区导航| 亚洲国产精品一区在线观看不卡| 夜夜嗨一区二区| 在线成人h网| 亚洲欧美大片| 一本大道久久a久久综合婷婷| 亚洲欧美日韩爽爽影院| 日韩视频一区二区三区在线播放免费观看 | 欧美在线观看视频| 一区二区三区久久| 另类成人小视频在线| 久久av一区二区| 国产精品家教| 亚洲国产日日夜夜| 亚洲福利视频一区| 久久精品国亚洲| 亚洲欧美日韩综合一区| 欧美日韩一区免费| 亚洲国产精品成人va在线观看| 国产亚洲福利| 亚洲免费网址| 亚洲在线观看免费| 欧美丰满少妇xxxbbb| 美日韩在线观看| 黑人操亚洲美女惩罚| 亚洲一区在线视频| 亚洲综合首页| 国产精品美女久久久久av超清| 亚洲精品少妇30p| 亚洲精品视频一区| 欧美成人蜜桃| 亚洲国产精品专区久久| 亚洲国产精品一区二区www| 久久国产精品72免费观看| 欧美一区二区三区四区高清| 欧美三级乱人伦电影| 亚洲视频在线观看| 亚洲欧美日本另类| 欧美视频亚洲视频| 亚洲一区二区三区四区五区黄| 亚洲午夜精品网| 国产精品久久久久久影视| 亚洲午夜羞羞片| 欧美亚洲一区二区在线观看| 国产精品视频在线观看| 亚洲欧美一区二区原创| 久久国产高清| 一区在线视频观看| 欧美~级网站不卡| 亚洲人成网站999久久久综合| 一区二区三区高清视频在线观看| 欧美另类高清视频在线| 欧美日本三区| 亚洲精品色婷婷福利天堂| 伊人精品久久久久7777| 亚洲一区二区三区四区五区午夜| 国产精品久久777777毛茸茸| 亚洲免费在线观看| 美女精品自拍一二三四| 亚洲精品国久久99热| 国产精品毛片a∨一区二区三区|国 | 亚洲欧美成人网| 国内精品久久久久久久影视麻豆| 久久av免费一区| 亚洲人成绝费网站色www| 亚洲男女毛片无遮挡| 国产在线精品自拍| 欧美日韩国语| 欧美一区久久| 99视频一区二区| 久久午夜羞羞影院免费观看| aaa亚洲精品一二三区| 国产精品综合av一区二区国产馆| 久久久久成人精品| 一本色道久久综合亚洲二区三区| 久久久久久久999| 在线亚洲一区二区| 欧美大片91| 欧美亚洲视频| 亚洲黄色免费| 午夜精品一区二区在线观看| 亚洲第一福利视频| 国产精品美女久久久免费| 久久先锋资源| 欧美一区二区三区播放老司机| 亚洲国产精品www| 久久米奇亚洲| 午夜亚洲福利在线老司机| 亚洲人成在线观看网站高清| 国产亚洲成av人片在线观看桃 | 亚洲国产精品va在线看黑人| 欧美一区二区三区在线播放| 一片黄亚洲嫩模| 亚洲第一精品久久忘忧草社区| 国产精品久久久久久妇女6080| 欧美国产日产韩国视频| 亚洲青涩在线| 久久av一区二区三区漫画| 亚洲综合精品| 亚洲午夜在线观看| 99国产一区二区三精品乱码| 亚洲第一黄色| 1024亚洲| 伊人久久综合| 伊人男人综合视频网| 国产精品久久中文| 国产精品久在线观看| 国产精品久久久久9999| 欧美性猛交一区二区三区精品| 欧美日韩成人一区| 欧美美女福利视频| 欧美日韩国产综合在线| 欧美日韩国产免费观看| 欧美日韩亚洲一区二区三区四区| 欧美成人性网| 欧美日韩国产成人| 亚洲精品日韩在线观看| 一区二区冒白浆视频| 国产婷婷色综合av蜜臀av | 99riav1国产精品视频| 亚洲黄色在线观看| 日韩视频免费观看高清完整版| 亚洲精品日韩激情在线电影| 99re66热这里只有精品4| 在线午夜精品自拍| 亚洲一区二区三区精品在线观看 | 久久婷婷国产综合精品青草| 亚洲最新色图| 精品1区2区3区4区| 欧美视频免费在线观看| 久久一区二区三区超碰国产精品| 久久久久久久久蜜桃| 亚洲欧美一区二区三区极速播放 | 亚洲私拍自拍| 一二三区精品福利视频| 亚洲午夜视频在线观看| 亚洲欧美日韩天堂| 午夜久久美女| 亚洲一区二区三区高清| 久久精品亚洲精品国产欧美kt∨| 久久国产精品色婷婷| 久久久欧美一区二区| 欧美在线亚洲在线| 久久久久久久久岛国免费| 欧美另类人妖| 国产精品v片在线观看不卡| 欧美性色综合| 欧美视频二区| 影音欧美亚洲| 99精品国产福利在线观看免费| 99pao成人国产永久免费视频| 香蕉久久夜色精品国产使用方法| 午夜精品美女久久久久av福利| 久久国产直播| 毛片av中文字幕一区二区| 一区二区三区欧美视频| 欧美在线视频不卡| 欧美99久久| 国产一级精品aaaaa看| 亚洲精品一区在线| 午夜一级在线看亚洲| 欧美在线免费视频| 99国产精品久久久久久久久久 | 亚洲国内自拍| 久久久av水蜜桃| 亚洲精品免费看| 西西裸体人体做爰大胆久久久| 欧美激情成人在线|