close

原文 : http://www.dansaks.com/articles/1999-02%20const%20T%20vs%20T%20const.pdf

 

原文我就不再贅述了,裡面的文章讀者們花一些時間就能閱讀完,不多,才三頁而已。 這一篇文章我打算直接寫code來解釋const 。

 

1.    Const int a ;
2.    Int const a ;

1 和 2是一樣的,就是a這個變數是完全不能修改他的 !

3.    Const int *a ;

第三題的話就是表示a是一個指向常數型整數的pointer ( 也就是說 整數的部份不可以修改,但是pointer可以修改 )
Ex : 
    {
        const int * a ; 
        printf ("a:0x%x \n"); //0x18FF28
   
        int b , c ;
        b = 20 ; //0x18FF1C 
        c = 30 ; //0x18FF10
   
        a = &b ; //now a = 0x18FF1c ,*a : 20 
        b = &b ; //now a = 0x18FF10 ,*a : 30
   
        a = 100 ;     // now will show error message ! 
                    // error C3892: 'a' : you cannot assign to a variable that is const
    }

4.    Int * const a;

第四題的意思是a 是一個指向常數型的pointer (也就是說pointer指向的value是可以修改的,但是pointer是不可以修改的)

Ex :
    
    {
        int *const a = new int ;
        
        *a = 50 ;
        printf ("a:%d , a:0x%x \n" , *a , a ) ; //50 , 0x6e1cc8
        *a *=50 ;
        printf ("a:%d , a:0x%x \n" , *a , a ) ; //250, 0x6e1cc8
        
        
        int b = 30 ;
        a = & b ;     // now will show error message !
                    // error C3892: 'a' : you cannot assign to a variable that is const
        
    
    
        delete a ;
    }
    
5.    Int const * a const ;

第五題其實可以不太用解釋, a 就是一個指向常數行整數的常數型pointer (也就是說,Pointer指向的value不能動,同時,Pointer 也不能動 ) 。
 

arrow
arrow
    創作者介紹
    創作者 Eric 的頭像
    Eric

    一個小小工程師的心情抒發天地

    Eric 發表在 痞客邦 留言(0) 人氣()