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

            攀升·Uranus


            Something Different,Something New
            數(shù)據(jù)加載中……

            C語(yǔ)言怎么解析聲明 熟練c/c++(五)

             

                     首先聲明如果你對(duì)int (*a)[10], char* const (*next());經(jīng)了解,就不要看了,一個(gè)聲明是沒(méi)什么意思的,這篇文章只是想闡述下C語(yǔ)言是怎么解析它的聲明     

                     聲明里面可以包括的元素有:類(lèi)型說(shuō)明符(int, void, char,struct...),存儲(chǔ)類(lèi)型extern, static, register, 類(lèi)型限定符(const, volatile), 變量名(標(biāo)識(shí)符), 符號(hào)(*,圓括號(hào)和中括號(hào))

                   總體原則是,找到標(biāo)識(shí)符(即是我們平時(shí)叫的變量名),從右向左解析;

                   具體驟如下:

                   1. 找到聲明中最左邊的標(biāo)識(shí)符,去掉標(biāo)識(shí)符   => 變量是叫標(biāo)識(shí)符

                   2. 查看標(biāo)識(shí)符右邊的下一個(gè)符號(hào),如果是方括號(hào),取出可能的大小,去掉方括號(hào) >是一個(gè)數(shù)。

                3. 查看標(biāo)識(shí)符右邊的下一個(gè)符號(hào)

             如果是左圓括號(hào),取出可能的參數(shù),一直到右括號(hào) > 是一個(gè)函數(shù)

                   4. 查看標(biāo)識(shí)符左邊的符號(hào),如果是左括號(hào),找到對(duì)應(yīng)的右括號(hào),并把括號(hào)中的聲明組合在一起?;氐降?/span>2步重新開(kāi)始執(zhí)行。

                   5. 查看標(biāo)識(shí)符左邊的符號(hào)如果是const, volatile,*, 繼續(xù)向左讀直到不是這三個(gè)類(lèi)型為止重復(fù)第4步。  =>釋為const, volatile,指向什么的指針

                   6. 剩下的符號(hào)一并讀入 =>static unsigned int

                   你可能想問(wèn)這幾步就可以解決了? 是的,這就是所謂的神奇解碼環(huán)。

                下面我來(lái)隨便驗(yàn)證下這個(gè)算法:

                   先來(lái)個(gè)簡(jiǎn)單的

            int (*a)[10] int* a[10];

               聲明式       步驟               執(zhí)行結(jié)果

            int (*a)[10]    1步           找到最左邊的標(biāo)識(shí)符a,表示a是一個(gè)

            int (*)[10]      2,3    不匹配

            int (*)[10]      4          匹配(,直接讀到),包括*,表示a是一個(gè)指向指針.Step2

            int [10]          2           匹配[10],表示a是一個(gè)指向..size=10的數(shù)組的指針

            int                 3,4,5    不匹配

            結(jié)束            6           表示a是一個(gè)指向int數(shù)組的指針

            int* a[10]     1           a是一個(gè)

            int* [10]       2           a是一個(gè)…size=10的數(shù)組

            int*              3           不匹配

            int                4           匹配,a是一個(gè)存放著指針,size=10的數(shù)組

            int                5           匹配,a是一個(gè)存放著int指針,size=10的數(shù)組

                   大家的出兩個(gè)聲明的結(jié)果是一個(gè)是指針,一個(gè)是數(shù)組。

                int a1[10];

                int a2[20];

                int (*b)[10];

                int* c[10];

                a[0] = 10;

                b = &a2;    //報(bào)錯(cuò),cannot convert from 'int (*)[20]' to 'int (*)[10]'

                b = &a1;    //b是指向size=10的數(shù)組的指針

                c[0] = &a1[0]; //c是一個(gè)數(shù)組,里面存放的是指針,指針指向int;


            (未完待續(xù))

            posted on 2009-01-08 21:09 攀升 閱讀(1580) 評(píng)論(0)  編輯 收藏 引用 所屬分類(lèi): C/C++

            免费观看成人久久网免费观看| 欧美精品乱码99久久蜜桃| 无码AV波多野结衣久久| 国产香蕉久久精品综合网| 一本色道久久综合亚洲精品| 精品亚洲综合久久中文字幕| 99久久国产免费福利| 无夜精品久久久久久| 亚洲精品无码久久久久| 狠狠久久亚洲欧美专区| 青青草原综合久久大伊人导航 | 久久天天躁狠狠躁夜夜avapp| 久久发布国产伦子伦精品| 久久九九青青国产精品| 日韩欧美亚洲综合久久 | 国内精品伊人久久久久AV影院| 91久久精品国产91性色也| 无码八A片人妻少妇久久| 久久精品九九亚洲精品天堂| 亚洲精品无码久久久影院相关影片| 久久香蕉国产线看观看99| 综合网日日天干夜夜久久| 国产精品青草久久久久福利99| 久久人人爽人人爽人人AV| 一本大道久久香蕉成人网| 中文精品久久久久国产网址| 韩国免费A级毛片久久| 久久精品国产99久久久古代| 精品久久久久久久中文字幕| 97久久香蕉国产线看观看| 亚洲国产另类久久久精品| 色综合久久久久综合99| 国产三级精品久久| 久久久综合九色合综国产| 精品精品国产自在久久高清| 麻豆亚洲AV永久无码精品久久| 亚洲va久久久噜噜噜久久男同| 一本色道久久综合| 久久综合亚洲色HEZYO社区| 久久婷婷色香五月综合激情| 亚洲国产成人久久综合一区77|