• <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 - 311, comments - 0, trackbacks - 0, articles - 0
              C++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

            (搬運工)常量指針 和 指針常量

            Posted on 2010-11-26 17:00 點點滴滴 閱讀(156) 評論(0)  編輯 收藏 引用 所屬分類: 02 編程語言
            在C++的學習中,有人經常搞不清楚“常量指針”和“指針常量”這兩個概念。其實簡單一點講,“常量指針”所指向的地址上的數據是常量,而“指針常量”所指向的地址是常量,地址上面的數據是可以變化的。


                 下面看及格簡單的例子,可以說明他們的區別:
                        第一個
             1 void main(){
             2     char *str1={"Hello"};
             3     char *str2={"Hello World"};
             4     char * const ptr1 =str1 ;
             5     //指針常量--指針本身是常量,指向的地址不可以變化,但是指向的地址所對應的內容可以變化
             6 
             7     ptr1 =str2; //錯誤 因為這是一個常量指針,改變指向的地址了
             8 
             9     printf("%s \n",*ptr1);
            10     }
            11 
            12 
            13 // 編譯錯誤    error C3892: 'ptr1' : you cannot assign to a variable that is const    
            14 


            第二個

             1 void main(){
             2     char *str1={"Hello"};
             3     char *str2={"Hello World"};
             4     char * const ptr1 =str1 ;
             5     //指針常量--指針本身是常量,指向的地址不可以變化,但是指向的地址所對應的內容可以變化
             6 
             7     *ptr1 ='A';// 正確 因為指向的地址的內容是可以變化的
             8 
             9     printf("%c \n",*ptr1);
            10     }
            11 
            12 //輸出  A
            13 

            第三個

             1 void main(){
             2     char *str1={"Hello"};
             3     char *str2={"Hello World"};
             4     const char *ptr1 = str1;
             5     //常量指針--指向字符串常量,所指向的字符串內容不能變,但是指向的地址可以變化
             6     
             7     ptr1=str2;// 正確 因為指向的地址是可以變化的
             8 
             9     printf("%s \n",ptr1);
            10     }
            11 
            12 //輸出 Hello World

            第四個

             1 void main(){
             2     char *str1={"Hello"};
             3     char *str2={"Hello World"};
             4     const char *ptr1 = str2;
             5     //常量指針--指向字符串常量,所指向的字符串內容不能變,但是指向的地址可以變化
             6     
             7     ptr1='A';// 錯誤 因為指向的地址是內容是不可以變化的
             8 
             9     printf("%c \n",ptr1);
            10     }
            11 
            12 
            13 //編譯錯誤    error C2440: '=' : cannot convert from 'char' to 'const char *'
            14 

            相信從上面四個簡單的例子可以看出他們不一樣的地方把,在這里要請大家注意一下的地方是:

            指針常量的申明:const 放在* 和指針名之間 Type * const pointer ;

            常量指針的申明:const放在類型說明符之前 const Type *pointer ;

            久久国产成人午夜aⅴ影院 | 久久综合久久自在自线精品自| 久久涩综合| 国产精品久久久久久久久软件 | 久久人妻少妇嫩草AV无码蜜桃| 久久天天日天天操综合伊人av| 亚洲AV日韩精品久久久久久久| 国产高潮国产高潮久久久91| 亚洲精品无码久久千人斩| 国产精品丝袜久久久久久不卡| 久久精品国产99国产精品亚洲 | 精品久久综合1区2区3区激情 | 亚洲精品NV久久久久久久久久| 久久婷婷五月综合国产尤物app| 久久久久无码精品国产app| 久久久国产精品亚洲一区| 久久人人超碰精品CAOPOREN | 国产精品狼人久久久久影院| 99久久精品国产一区二区| 无码国内精品久久人妻麻豆按摩| 国产精品va久久久久久久| 国产91色综合久久免费| 精品无码久久久久久尤物| 狠狠综合久久AV一区二区三区| 欧美精品一区二区久久| 伊人丁香狠狠色综合久久| 成人久久精品一区二区三区| 国产午夜精品理论片久久影视| 久久久久99精品成人片直播| 久久久久久久久无码精品亚洲日韩| 亚洲中文字幕久久精品无码APP | 亚洲国产一成久久精品国产成人综合| 丁香五月综合久久激情| 亚洲狠狠久久综合一区77777| 韩国无遮挡三级久久| 久久精品国产一区| 久久99精品久久久久久野外| 久久久久久久久久久免费精品| 国产精品无码久久综合网| 亚洲国产成人精品久久久国产成人一区二区三区综 | 久久综合色老色|