const指針精華

 1、先看一個(gè)普通的指針使用。
    
    形式:int *pTmp
    
    含義:一個(gè)普通的指向int類型的指針
    int main(int argc, char *argv[])
    {
        int i = 1;
        
        int  *pTmp = &i;
        printf("pTmp = %d\n", *pTmp);
        
        i = 2;
        printf("pTmp = %d\n", *pTmp);
        
        (*pTmp)++;
        printf("pTmp = %d\n", *pTmp);
        
        system("PAUSE");
        
        return 0;
    }

     輸出:
     pTmp = 1
     pTmp = 2
     pTmp = 3
     請(qǐng)按任意鍵繼續(xù). . .

     
     2、
     
     形式:const int *pTmp
     
     含義:表示pTmp所指向的對(duì)象是只讀的,但pTmp可指向其他地址,即pTmp可變。


     int main(int argc, char *argv[])
     {
         int i = 1;
         int j = 100;
         
         const int  *pTmp = &i; /*正確:表示pTmp所指向的對(duì)象是只讀的,但pTmp可指向其他地址,即pTmp可變*/
         printf("pTmp = %d\n", *pTmp);
         
         i = 2;
         printf("pTmp = %d\n", *pTmp);
         
         pTmp = &j;            /*正確:將pTmp指向變量j的地址*/
         printf("pTmp = %d\n", *pTmp);
         
         
         (*pTmp)++; /*錯(cuò)誤,pTmp指向的對(duì)象是只讀的,編譯出錯(cuò)提示:assignment of read-only location */
         printf("pTmp = %d\n", *pTmp);
         
         system("PAUSE");
         
         return 0;
     }
     
     
     
     
     3、
     形式:int const *pTmp
     
     含義:與2相同, 表示pTmp所指向的對(duì)象是只讀的,但pTmp可指向其他地址,即pTmp可變。


     int main(int argc, char *argv[])
     {
     int i = 1;
     int j = 100;
     
     const int  *pTmp = &i; /*正確:表示pTmp所指向的對(duì)象是只讀的,但pTmp可指向其他地址,即pTmp可變*/
     printf("pTmp = %d\n", *pTmp);
     
     i = 2;
     printf("pTmp = %d\n", *pTmp);
     
     pTmp = &j;            /*正確:將pTmp指向變量j的地址*/
     printf("pTmp = %d\n", *pTmp);
     
     
     (*pTmp)++; /*錯(cuò)誤,pTmp指向的對(duì)象是只讀的,編譯出錯(cuò)提示:assignment of read-only location */
     printf("pTmp = %d\n", *pTmp);
     
     system("PAUSE");
     
     return 0;
     }
     
     
     
     
     4、
     形式:int * const pTmp
     
     含義:pTmp不可修改,但pTmp所指向的對(duì)象可以修改。


     int main(int argc, char *argv[])
     {
     int i = 1;
     int j = 100;
     
     int * const pTmp = &i;
     printf("pTmp = %d\n", *pTmp);
     
     i = 2;
     printf("pTmp = %d\n", *pTmp);
     
     pTmp = &j;  /*錯(cuò)誤,pTmp不可修改,編譯提示:error:assignment of read-only variable `pTmp'*/
     printf("pTmp = %d\n", *pTmp);
     
     
     (*pTmp)++; /*正確,pTmp所指向的對(duì)象可以修改 */
     printf("pTmp = %d\n", *pTmp);
     
     system("PAUSE");
     
     return 0;
     }
     
     
     
     
     5、
     形式:const int * const pTmp
     
     含義:pTmp不可修改,pTmp所指對(duì)象也不能修改。


     int main(int argc, char *argv[])
     {
         int i = 1;
         int j = 100;
         
         const int * const pTmp = &i;
         printf("pTmp = %d\n", *pTmp);
         
         i = 2;  /*正確*/
         printf("pTmp = %d\n", *pTmp);
         
         pTmp = &j;  /*錯(cuò)誤:error: assignment of read-only variable `pTmp'*/
         printf("pTmp = %d\n", *pTmp);
         
         
         (*pTmp)++;  /*錯(cuò)誤:error: increment of read-only location*/
         printf("pTmp = %d\n", *pTmp);
         
         system("PAUSE");
         
         return 0;
     }

   
6  


int main(int argc, char *argv[])
  {
      int a = 3;
      int b;
     
     /*定義指向const的指針(指針指向的內(nèi)容不能被修改)*/ 
     const int* p1; 
     int const* p2; 
     
     /*定義const指針(由于指針本身的值不能改變所以必須得初始化)*/ 
     int* const p3 = &a; 
     
     /*指針本身和它指向的內(nèi)容都是不能被改變的所以也得初始化*/
     const int* const p4 = &a;
     int const* const p5 = &b; 
     
      p1 = p2 = &a; //正確
      *p1 = *p2 = 8; //不正確(指針指向的內(nèi)容不能被修改)
     
      *p3 = 5; //正確
      p3 = p1; //不正確(指針本身的值不能改變) 
     
      p4 = p5;//不正確 (指針本身和它指向的內(nèi)容都是不能被改變) 
      *p4 = *p5 = 4; //不正確(指針本身和它指向的內(nèi)容都是不能被改變) 
      
     return 0; 
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容