• <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>
            posts - 37, comments - 55, trackbacks - 0, articles - 0
              C++博客 ::  :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理
            void main()
            {
                
            /**
                 * 非常量指針, 是指向常量數(shù)據(jù)的指針
                 
            */

                
            {
                    
            const char  *p1;
                    
                    
            char a = 20;
                    
            char b = 20;
                    p1 
            = &a;
                    
            // *p1 = 10;   出錯(cuò), 不能改變 p1 指向的內(nèi)容
                    p1 = &b;     //正確, 可以改變 p1 本身的內(nèi)容
                }


                
            /**
                 * 非常量指針, 是指向常量數(shù)據(jù)的指針
                 * 跟 const char  *p1; 相同
                 
            */

                
            {
                    
            char const *p2;
                    
            char a = 20;
                    
            char b = 20;
                    p2 
            = &a;
                    
            // *p2 = 10;   出錯(cuò), 不能改變 p1 指向的內(nèi)容
                    p2 = &b;     //正確, 可以改變 p1 本身的內(nèi)容
                }


                
            {
                    
            /**
                     * 常量指針, 但并非指向常量數(shù)據(jù) 的指針
                     
            */

                    
            char a = 20;
                    
            char b = 20;
                    
            char * const p3 = &a; // 由于是常量指針, 故需要在初始化時(shí)賦值, 之后不能改變

                    
            // p3 = &b; // 出錯(cuò), p3 是常量指針, 不能改變它的值
                    *p3 = 30;   // 但 p3 指向的內(nèi)容不是常量, 可以進(jìn)行改變
                }


                
            // [const] [類(lèi)型] [星號(hào)]
                
            // 123 [const] [類(lèi)型] [星號(hào)]     const int *
                
            // 132 [const] [星號(hào)] [類(lèi)型]     const * int
                
            // 213 [類(lèi)型]  [const] [星號(hào)]    int const *
                
            // 231 [類(lèi)型]  [星號(hào)] [const]    int * const
                
            // 312 [星號(hào)]  [const] [類(lèi)型]    * const int
                
            // 321 [星號(hào)]  [類(lèi)型]  [const]   * int const
                {
            //        const int * p1;     // 上面第一種 非常量指針, 是指向常量數(shù)據(jù)的指針
            //        const * int p2;
            //        int const * p3;     // 上面第二種 非常量指針, 是指向常量數(shù)據(jù)的指針
            //        int * const p4 = 0; // 上面第三種, 常量指針, 但并非指向常量數(shù)據(jù) 的指針
            //        * const int p5;
            //        * int const p6;
                }


                
            // 只剩下 const* int p2; 了
                {
                    
            // warning C4518: 'int ' : storage-class or type specifier(s) unexpected here; ignored
                    
            // 'int': 此處不應(yīng)出現(xiàn)存儲(chǔ)類(lèi)或類(lèi)型說(shuō)明符;已被忽略
            //        const* int p2;
            //        int a = 20;
            //        p2 = &a;
            //        *p2 = 30;  // 此處會(huì)出錯(cuò), 不能修改 p2  所指向的地址的值, 故是指向常量的指針
                    
                    
            // 編譯器將 const * int p2;  相當(dāng)于 const int *p2   // 
                }


                
            // 總結(jié)
                
            // const int * p1;     // 上面第一種 非常量指針, 是指向常量數(shù)據(jù)的指針
                
            // const * int p2;     // 相當(dāng)于 const int *p2; 指向常量數(shù)據(jù)的指針 // 但編譯器會(huì)出警告
                
            // int const * p3;     // 上面第二種 非常量指針, 是指向常量數(shù)據(jù)的指針
                
            // int * const p4 = 0; // 上面第三種, 常量指針, 但并非指向常量數(shù)據(jù) 的指針

                
            // 將它們分類(lèi)
                
            // const int * p1;     // 上面第一種 非常量指針, 是指向常量數(shù)據(jù)的指針    
                
            // int const * p3;     // 上面第二種 非常量指針, 是指向常量數(shù)據(jù)的指針
                
            // const * int p2;     // 相當(dāng)于 const int *p2; 指向常量數(shù)據(jù)的指針 // 但編譯器會(huì)出警告

                
            // int * const p4 = 0; // 上面第三種, 常量指針, 但并非指向常量數(shù)據(jù) 的指針

                
            // 可以得出
                
            // const 只要在 * 號(hào)前,無(wú)論星號(hào)在什么位置,  const 是修飾指向的數(shù)據(jù)類(lèi)型,所以是 指向常量數(shù)據(jù)的指針, 但 * 號(hào)擺中間會(huì)有 C4518 警告
                
            // const 只要在 * 號(hào)后,只有一種,這時(shí), const 修改指針本身,是一個(gè)指針常量

                
            {
                    
            // 如果是
                    int * const * p = 0;

                    
            // 那就是指向 常量 的指針常量了 
                }


            }



            Feedback

            # re: CONST、TYPE 和 星號(hào) 的故事   回復(fù)  更多評(píng)論   

            2008-10-04 16:22 by 陳梓瀚(vczh)
            unittype -> "int" '數(shù)據(jù)類(lèi)型
            unittype -> "const" unittype '數(shù)據(jù)是常量類(lèi)型
            ptrtype -> unittype
            ptrtype -> ptrtype "*" '指針類(lèi)型
            ptrtype -> ptrtype "*" "const" '指針是常量類(lèi)型

            為什么需要最后一項(xiàng)呢?其實(shí)根據(jù)表達(dá)式的一般設(shè)計(jì),需要優(yōu)先級(jí)什么的加一個(gè)括號(hào)就行了。也就是說(shuō)int*const原本可以寫(xiě)成const(int*)。的可惜TM函數(shù)指針又是那個(gè)鳥(niǎo)樣,所以就搞得這么復(fù)雜了。

            上面的語(yǔ)法安排是優(yōu)先級(jí)組合的典型寫(xiě)法,也就是說(shuō)這里前綴比后綴優(yōu)先級(jí)更高。因此const int*就是(const int)*。

            # re: CONST、TYPE 和 星號(hào) 的故事   回復(fù)  更多評(píng)論   

            2008-10-06 10:10 by pengshan
            可以這么看:以*為界,const在*前的是限定*p,在*后面的是限制p。前者限定p指向的值,后者限定指針p。
            国产激情久久久久久熟女老人| 精品国产福利久久久| 久久精品人妻一区二区三区| 99久久伊人精品综合观看| 久久精品无码专区免费青青| 久久精品亚洲精品国产色婷| 国内精品久久久久久久影视麻豆 | 狠狠精品干练久久久无码中文字幕| 久久亚洲综合色一区二区三区| 青青久久精品国产免费看| 午夜久久久久久禁播电影| 免费精品99久久国产综合精品| 伊人色综合久久天天网| 99精品久久精品| 精品国产乱码久久久久久呢| 国产精品久久亚洲不卡动漫| 久久青青草原精品国产不卡 | 91久久婷婷国产综合精品青草| 精品99久久aaa一级毛片| 新狼窝色AV性久久久久久| 久久精品无码一区二区三区免费| 亚洲国产精品无码久久久不卡 | 久久婷婷久久一区二区三区 | 亚洲精品高清国产一久久| 波多野结衣AV无码久久一区| 久久人人爽人人精品视频| 69国产成人综合久久精品| 国产精品中文久久久久久久| 久久99精品久久久久久秒播| 99精品国产在热久久无毒不卡| 国产激情久久久久久熟女老人 | 情人伊人久久综合亚洲| 久久天天躁狠狠躁夜夜网站 | 狠狠干狠狠久久| av午夜福利一片免费看久久| 久久精品亚洲中文字幕无码麻豆 | 91麻豆国产精品91久久久| 日韩AV毛片精品久久久| 久久综合日本熟妇| 香蕉久久夜色精品国产2020 | 久久99热国产这有精品|